学习网址:
http://www.jianshu.com/p/64172378a178
小结:
1.softmax
softmax一般作为神经网络最后一层,作为输出层进行多分类,Softmax的输出的每个值都是>=0,并且其总和为1,所以可以认为其为概率分布。
softmax 示意图
softmax示意图
softmax 输出层示意图
2.损失函数
交叉熵(cross-entropy)就是神经网络中常用的损失函数。对于预测值Yi和真实值Y' ,两者的乘积越大,coss-entropy越小。
3.梯度下降
如果对于所有的权重和所有的偏置计算交叉熵的偏导数(如何计算呢?),就得到一个对于给定图像、标签和当前权重和偏置的「梯度」(图像、标签和偏置在图上什么地方呢?),如图所示:
我们希望损失函数最小,也就是需要到达交叉熵最小的凹点的低部(极值位置)。在上图中,交叉熵被表示为一个具有两个权重的函数。而学习速率,即在梯度下降中的步伐大小。
4.激活函数
激活函数(activation function)可以使得模型加入非线性因素的。
解决非线性问题有两个办法:线性变换、引入非线性函数。
(1)原本一个线性不可分的模型如:X^2 + Y^2 = 1,将坐标轴进行高维变换,横坐标变成X^2,纵坐标变成 Y^2,这是表达式变为了 X + Y = 1,这样,原来的非线性问题,就变成了一个线性可分的问题,变成了一个简单的一元一次方程了。
(2)引入非线性函数
异或是一种基于二进制的位运算,用符号XOR 表示(Python中的异或操作符为 ^ ),其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。
为了解决问题,我们来构建一个两层的神经网络,该神经网络有两个激活函数,F(x,y)和 H(x,y), 具体如下图所示:
F(x,y)为一个阈值为1的阈值函数:
if AX+BY > 1:
F = 1
else:
F = 0
H(x,y)为一个阈值为0的阈值函数:
if AX+BY > 0:
H = 1
else:
H = 0
- 对于(1,1)的点,第二层从左到右隐藏层的值分别为(1,1,1),最后输出为(1,1,1)*(1,-2,1)=0;
- 对于(0,0)的点,第二层从左到右隐藏层的值分别为(0,0,0),最后输出为(0,0,0)*(1,-2,1)=0;
- 对于(1,0)的点,第二层从左到右隐藏层的值分别为(1,0,0),最后输出为(1,0,0)*(1,-2,1)= 1;
- 对于(0,1)的点,第二层从左到右隐藏层的值分别为(0,0,1),最后输出为(0,0,1)*(1,-2,1)= 1;
5.sigmoid
sigmoid是一个用来做二分类的"S"形逻辑回归曲线。
sigmod有个缺点,sigmoid函数反向传播时,很容易就会出现梯度消失,在接近饱和区的时候,导数趋向0,会变得非常缓慢。因此,在优化器选择时选用Adam优化器。
6. ReLu
ReLu来自于对人脑神经细胞工作时的稀疏性的研究,在 Lennie,P.(2003)提出人脑神经元有95%-99%是闲置的,而更少工作的神经元意味着更小的计算复杂度,更不容易过拟合。
ReLU在训练时是非常脆弱的,并且可能会“死”。例如,经过ReLU神经元的一个大梯度可能导致权重更新后该神经元接收到任何数据点都不会再激活。如果发生这种情况,之后通过该单位点的梯度将永远是零。也就是说,ReLU可能会在训练过程中不可逆地死亡,并且破坏数据流形。如果学习率太高,大部分网络将会“死亡”(即,在整个训练过程中神经元都没有激活)。而设置一个适当的学习率,可以在一定程度上避免这一问题。
7.Dropout
随着迭代次数的增加,我们可以发现测试数据的loss值和训练数据的loss存在着巨大的差距, 随着迭代次数增加,train loss 越来越好,但test loss 的结果确越来越差,test loss 和 train loss 差距越来越大,模型开始过拟合。
Dropout是指对于神经网络单元按照一定的概率将其暂时从网络中丢弃,从而解决过拟合问题。