深度前馈网络又称多层感知机、前馈神经网络。即只有从x向y方向的传播,最终输出y。
主要包括输入层、隐藏层和输出层。神经网络的模型可以解决非线性问题。
计算网络的参数通过反向传播;如果每一层隐藏层都只有wx+b的运算,则多层累加变为w1*(w2*(w3*x))+a = W*x +a,失去了非线性能力。故每一层后面会加上一个激活层。
实例:学习XOR
单个线性函数无法解决XOR的问题,但是多个线性函数的组合,每个线性函数理解为一个神经元,就可以表示XOR运算。
这里提到了RELU激活函数g(x) = max{0,x},也叫整流线性单元,是大多前馈神经网络的默认激活函数。主要优势运算简单。后面有专门章节介绍和比较各个激活函数。
基于梯度的学习:
代价函数:和其他机器学习使用方式类似。
使用最大似然学习条件分布:
学习条件统计量:
输出单元:
主要就是sigmoid 和softmax两种,都存在饱和的问题,前者在输入过大和过小时,后者在有某个预测特别大时。
sigmoid:主要用于二分类,或输出概率。 这边提到softplus:ζ(x)=ln(1+exp(x))
softmax:
输出每个类可能的概率。多分类以及预测自然语言处理中预测下一句话之类时可以用到。但是如果可能性太多的话,运算过大,可以通过树状结构减少运算。
隐藏单元:
隐藏单元主要包括仿射变换 wx+b 和激活函数g(x),重点研究激活函数:
下面介绍几种常见激活函数:
ReLU族
ReLU:整流线性单元 g(z0) = max(0,z),最常用。
优势:计算方便,大于0部分不存在梯度饱和。
计算时通常将仿射变换的b初始设置一个较小的正数,如0.1,这样开始时大多数样本都可以通过。
缺点:无法学习小于0的样本。
针对上述缺点出现了很多变种:
LeakReLU:
这样可以学习小于0的部分。
PReLU:同LeakReLU,但是a参数是根据数据确定的,而非事先指定
学习方式如下:
RReLU:
RReLU:训练时是波动的,测试时就固定下来了。
ELU:
SReLU:
激活后样本均值为0,方差为1,相当于自归一化,效果比batchnormlize好。
参考别人的一幅图再。
补充一个softplus:
ζ(x)=ln(1+exp(x)):
softplus相当于平滑版的ReLU。
再回忆一下这些激活函数的性质:
Sigmoid族
在整流线性单元之前,主要使用Sigmoid激活函数和tanh激活函数
Sigmoid:
将实数压缩到0到1,适用于输出概率
导数
tanh:g(z) = tanh(z) = 2(2z)-1
将实数压缩到-1到1
导数
sigmoid函数容易饱和,不适合前馈神经网络中隐藏层的激活。但是在诸如LSTM的网络中有用。
二分类问题,一般隐藏层用tanh。因为其均值为0,保持整个网络始终输入0均值的数据,较易优化。
其他都不常用了。也没有什么优势就不介绍了。
架构设计:
理论上深度学习网络可以近似实数空间中的所有函数,只要神经元足够多。
深度学习之所以优越,就是因为同等的表达能力,深层网络需要的神经元小于浅层网络且相对不容易过拟合。
深度网络不单单是一层层的依次链接,后面章节会有介绍多种变种的深度学习网络。
反向传播和其他的微分算法:
从x到y时前向传播,产生一个标量代价函数:
反过来从y计算梯度调整参数称为反向传播。
通过计算图来看数据流向:
主要通过链式法则计算。
后面具体讲解。。
其他没看懂意义。。