一、第一周-概论
1.不同的神经网络在不同的领域中应用:
(1)一些信息预测和广告推送应用的是相对标准的神经网络(Standard neural network)
(2)图像领域里,经常使用卷积神经网络CNN(Convoluted neural network)
(3)对一些序列数据,语言,汉字英语字母或单词,音频视频,经常使用循环神经网络RNN(Recurrent neural network)
(4)对一些比较复杂的内容,如无人驾驶,需要使用混合的神经网络结构(Hybrid neural network architecture)
2.结构化数据和非结构化数据
(1)结构化数据:每个特征都有清晰的定义
(2)非结构化数据:与结构化数据比较让计算机更难理解,如视频音频等
3.在机器学习(Machine learning)领域,主要有三类不同的学习方法:
(1)监督学习(Supervised learning)
训练资料是由输入数据(通常是向量)和预期输出所组成。由训练资料中学到或建立一个模式( learning model),并依此模式推测新的实例。
(2)非监督学习(Unsupervised learning)
无监督式学习(Unsupervised Learning )是人工智能网络的一种算法(algorithm),其目的是去对原始资料进行分类,以便了解资料内部结构。有别于监督式学习网络,无监督式学习网络在学习时并不知道其分类结果是否正确,亦即没有受到监督式增强(告诉它何种学习是正确的)。其特点是仅对此种网络提供输入范例,而它会自动从这些范例中找出其潜在类别规则。当学习完毕并经测试后,也可以将之应用到新的案例上。
(3)半监督学习(Semi-supervised learning)
半监督学习的基本思想是利用数据分布上的模型假设, 建立学习器对未标签样本进行标签,半监督学习问题从样本的角度而言是利用少量标注样本和大量未标注样本进行机器学习,从概率学习角度可理解为研究如何利用训练样本的输入边缘概率 P( x )和条件输出概率P ( y | x )的联系设计具有良好性能的分类器。
二、第二周-logistic回归讲述神经网络基础
1.logisitic回归
logisitic回归是一个用于二分分类的算法,即输入数据后通过该网络的计算将其分为两类。
即Given x ,want = P(y=1|x)
paramters:w∈Rnx,b∈R
Output = (w_T *X + b)
((z) = 为sigmoid函数是一种激活函数,如下图)
数据解释:
(1)m个训练数据 {(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
X = [x(1) x(2) ...x(m) ] (其中x(i)是指训练集中的第i个数据向量,可能是一张图,x(i).shape = (nx,1) ,X.shape = (nx,m))
Y = [y(1) y(2) ...y(m)] (y(i)为训练集中的标记即预期输出值为0或1,y(i).shape = (1,1) ,Y.shape = (1,m))
(2)w为一个n_x维的向量,b是一个实数
(w和b均为计算过程中用到的参数,我们训练的目的就是要不断更新w和b来使Costfunction的值降低,从而使分类更准确)
(3)Cost function(成本函数)loss function(损失函数)来描述和衡量预测输出值和实际值有多接近
loss function描述的是单个样本上的预测表现,cost function描述的是全体训练集上的预测表现
logistic用的loss function是:
(值越小代表误差越小)
cost function是:
(所有全体训练集的损失函数的平均值)
(4)反向传播计算导数:
da = = --
dz =
其中
则
然后更新w和b
Repeat{
w:=w - α*dw
b:=b - α*db
}
2.应用于m个训练样本使用for循环
(1)计算出一次下降的特征值的梯度
(2)更新特征值
至此便完成一次梯度下降算法,要想使cost function的值最低需要做很多次梯度下降的操作
3.应用于m个训练样本使用向量化的方法
向量化:为了消除for循环.,提高运行速度
(1)前向传播计算预测值A的过程:
输入x向量化成
计算z
其中
这里的b是实数,在这里用到了矩阵计算的广播,b在计算中变成了1*m的矩阵
便计算出了所有样本的预测值A
(2)反向传播计算导数dw和db的过程:
(3)一遍梯度下降的伪代码则可以简单的写成
而想要达到cost function最小则需要多次迭代这个过程,这个for循环是避免不了的。
4.python中numpy的向量化应用小结
x = arry0.reshape((a,b)) #将arry0 reshape为(a,b)维度的矩阵
np.random.randn(a,b) #随机生成一个(a,b)维度的矩阵
np.sum(A,axis=1,keepdims=True) #将A的每一行相加,keepdims=True确保python输出的是(n,1)维度的矩阵而不是(n,)这样的秩为1的数组
a.shape #输出a的维度
a.T #求a的转置
1/a #求矩阵a中各元素的倒数
np.dot(a,b) #计算a和b的矩阵乘积
a*b #计算a和b的对应元素的乘积,支持广播机制
np.abs(a) #计算矩阵a的各元素的绝对值
np.log(a) #计算矩阵a的各元素的log值
np.maxmum(a,0) #计算矩阵a中和0相比的最大值
np.sum(a) #计算矩阵a中的所有元素的和
np.linalg.norm(a,axis=1,keepdims=True) #计算每一行的长度,得到一个列向量,多用于归一化计算分母列矩阵