- 神经网络
神经网络最开始是受生物神经系统的启发,为了模拟生物神经系统而出现的。大脑最基本的计算单元是神经元,人类的神经系统中大概有86亿的神经元,它们之间通过1014-1015的突触相连接。每个神经元从它的树突(dendrites)接受输入信号,沿着唯一的轴突(axon)产生输出信号,而轴突通过分支(branches of axon),通过突触(synapses)连接到其他神经元的树突,神经元之间就这通过这样的连接,进行传递。
- 神经网络模型
为了模拟这种神经系统的数学模型,如下图:
其中x_0,x_1,x_2,为其他神经元沿着轴突通过突触、树突传送到此神经元的输入信号,该神经元细胞,通过与对应的w_n参数(该参数表示该输入对该神经元影响的大小)相乘、求和等,得到最终的输出。其中f为激活函数(activation funtion),b表示偏置项(bias)。
- 感知器
单层感知器是最简单的神经网络,只包含输入层和输出层,输入层和输出层是直接相连。
多层感知器:包含多层计算。相对于单层感知器,输出端从一个变到了多个;输入端和输出端之间也不光只有一层,现在又两层:输出层和隐藏层。
- 激活函数
输入的信号,在神经元体内相加,当超过某一阈值时,神经元就会起火(fire),并沿着轴突产生一个尖峰(spike),在数学模型中,我们不考虑尖峰产生的精确时间的影响,只考虑神经元起火的频率所带来的影响,为了模拟起火频率,设计出激活函数来表示沿着轴突传递尖峰的频率。常见的激活函数有以下几种。
(1) sigmoid函数
公式:sigmoid函数也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。
在特征相差比较复杂或是相差不是特别大时效果比较好。
sigmoid缺点:
激活函数计算量大,反向传播求误差梯度时,求导涉及除法
反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
Sigmoids函数饱和且kill掉梯度。
Sigmoids函数收敛缓慢。
下面解释为何会出现梯度消失:
反向传播算法中,要对激活函数求导,sigmoid 的导数表达式为:
sigmoid 原函数及导数图形如下:
由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象。
(2) Tanh函数
公式
曲线
也称为双切正切函数,取值范围为[-1,1]。
tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。
(3) ReLU函数
Rectified Linear Unit(ReLU) - 用于隐层神经元输出
公式
曲线
RELU特点:
输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入
ReLU 的优点:
Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多
ReLU 的缺点:
训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
(4) softmax函数
Softmax - 用于多分类神经网络输出
公式
举个例子来看公式的意思:
就是如果某一个 zj 大过其他 z, 那这个映射的分量就逼近于 1,其他就逼近于 0,主要应用就是多分类。
为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
第二个原因是需要一个可导的函数。
5.损失函数
通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的算法使用的损失函数不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。通常表示为如下:
(1)0-1损失函数和绝对值损失函数
0-1损失是指,预测值和目标值不相等为1,否则为0:
感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,即满足 |Y−f(X)| 绝对值损失函数为: (2)log对数损失函数 逻辑斯特回归的损失函数就是对数损失函数,在逻辑斯特回归的推导中,它假设样本服从伯努利分布(0-1)分布,然后求得满足该分布的似然函数,接着用对数求极值。逻辑斯特回归并没有求对数似然函数的最大值,而是把极大化当做一个思想,进而推导它的风险函数为最小化的负的似然函数。从损失函数的角度上,它就成为了log损失函数。 log损失函数的标准形式: 在极大似然估计中,通常都是先取对数再求导,再找极值点,这样做是方便计算极大似然估计。损失函数L(Y,P(Y|X))L(Y,P(Y|X))是指样本X在分类Y的情况下,使概率P(Y|X)达到最大值(利用已知的样本分布,找到最大概率导致这种分布的参数值) (3)平方损失函数 最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为: (4) 指数损失函数 AdaBoost就是一指数损失函数为损失函数的。 指数损失函数的标准形式: 5. Hinge损失函数 Hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于 这个式子和如下的式子非常像: 其中l(wxi+byi)l(wxi+byi)就是hinge损失函数,后面相当于L2正则项。 Hinge函数的标准形式: y是预测值,在-1到+1之间,t为目标值(-1或+1)。其含义为,y的值在-1和+1之间就可以了,并不鼓励|y|>1|y|>1,即并不鼓励分类器过度自信,让某个正确分类的样本的距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的分类误差。 5.前向传播算法 前向传播算法,顾名思义,是由前往后进行的一个算法。最开始,我们会初始化一组w的取值,并且选定一个激活函数,为了后面的方便,我们假设选定sigmoid函数作为函数,其函数形式为: 并且它的导数为H′(x)=H(x)(1−H(x))H′(x)=H(x)(1−H(x))。 有了联结权重ww和激活函数H(x)H(x)之后,就可以由前往后计算,依次算出所有的aa值,zz值,最终算出输出层的yy值。这就是前向传播算法。 6.反向传播算法 前面用初始化的联结权重计算的输出层值和实际值肯定会有很大的偏差,我们需要对连接权重进行优化,此时就需要使用反向传播算法。 现在假设经过前向传播算法计算的某个输出值为yk,表示输出层的第kk个输出,而其实际的值为tktk(训练样本的标签值是已知的,不然怎么训练)。那么误差函数定义如下: 后向传播算法是通过梯度下降的方法对联结权重进行优化,所以需要计算误差函数对联结权重的偏导数。