1. 试述常见的激活函数,试述将线性函数 f(x)=wTxf(x)=w^Txf(x)=wTx 用作神经元激活函数的缺陷
1.1什么是激活函数
如下图,如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function.
1.2激活函数的作用
如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这也是为什么不使用线性激活函数的原因。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
1.3常见的激活函数
- Sigmoid激活函数
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0,1)(0, 1)(0,1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如 Sigmoid 交叉熵损失函数。
然而,sigmoid 也有其自身的缺陷,最明显的就是饱和性。从下图可以看到,其两侧导数逐渐趋近于 0 。具有这种性质的称为软饱和激活函数。具体的,饱和又可分为左饱和与右饱和。与软饱和对应的是硬饱和。
- Tanh函数
tanh 是双曲正切函数,tanh 函数和 sigmod 函数的曲线是比较相近的,咱们来比较一下看看。首先相同的是,这两个函数在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新;不同的是输出区间,tanh 的输出区间是在 (-1,1) 之间,而且整个函数是以 0 为中心的,这个特点比 sigmod 的好。
一般二分类问题中,隐藏层用 tanh 函数,输出层用 sigmod 函数。不过这些也都不是一成不变的,具体使用什么激活函数,还是要根据具体的问题来具体分析,还是要靠调试的。
详情看下图:
- ReLU
ReLU 全称是:Rectified linear unit, 是目前比较流行的激活函数,它保留了类似 step 那样的生物学神经元机制:输入超过阈值才会激发。虽然在 0 点不能求导,但是并不影响其在以梯度为主的反向传播中发挥有效作用。有关 ReLU 的详细介绍,请移步论文:《Rectified Linear Units Improve Restricted Boltzmann Machines》 还有一篇介绍比较全的博客:神经网络回顾 - Relu 激活函数.
图示如下:
- Leaky ReLU
由于 ReLU 在小于零的部分全部归为 0 ,这样极易造成 神经元死亡 ,因此 Andrew L. Maas 等人在论文 《Rectifier Nonlinearities Improve Neural Network Acoustic Models》 中提出了新的激活函数,在小于 0 的方向增加一个非常小的斜率。如下图:
2.感知机与多层网络
2.1感知机
感知机(Perceptron)由两层神经元组成,如图所示,输入层接收外界输入信号后传递给输出层,输出层是 M−PM−P 神经元,亦称为“阈值逻辑单元”。
更一般地,给定训练数据集,权重wiw_iwi以及阈值θ\thetaθ可通过学习得到。阈值θ\thetaθ可看作一个固定输入为 −1.0-1.0−1.0的“哑结点”多对应的连接权重wn+1w_{n+1}wn+1. 这样,权重和阈值学习就可统一为权重的学习。感知机的学习规则非常简单,对训练样例(x,y)(x,y)(x,y),若当前感知机的输出为y^\hat yy^, 则感知机权重将最优调整:
wi←wi+ΔwiΔwi=η(y−y^)xiw_i \leftarrow w_i +\Delta w_i \\ \Delta w_i=\eta(y-\hat y)x_iwi←wi+ΔwiΔwi=η(y−y^)xi
其中η∈(0,1)\eta \in (0,1)η∈(0,1)称为“学习率(learing rate)” .从上式可以看出,若感知机对训练样例(x,y)(x,y)(x,y)预测正确,则感知机不发生变化,否则将根据错误的程度进行权重调整。感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限。只能处理线性可分的情况,无法处理非线性可分的情况。
2.2多层网络
要解决非线性可分问题,需要考虑使用多层功能神经元。输出层和输入层之间的一层神经元,被称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元。
更一般地,常见的神经网络如下图,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结果通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出;换言之,输入层神经元仅是接受输入,不进行函数处理,隐层与输出层包含功能神经元。
3. 试述使用sigmoid激活函数的神经元与对数几率回归的联系。
两者都是跟 sigmoidsigmoidsigmoid函数有关,但是在对数几率回归里,sigmoidsigmoidsigmoid函数的作用是将线性回归模型产生的预测值(实值)转化为0/10/10/1 值. sigmoidsigmoidsigmoid 函数是用于代替单位阶跃函数,因为 sigmoidsigmoidsigmoid 函数单调且可微;在神经元模型中, sigmoidsigmoidsigmoid函数作为“激活函数”用以处理产生神经元的输出,因为神经元模型中的神经元收到来自nnn个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,采用“激活函数”能将输出值转化为 0/10/10/1 值。
3. 对于图5.7(102页)中的 ,试推导出BP算法中的更新公式
对训练例(xk,yk)(\bm x_k,\bm y_k)(xk,yk), 假定神经网络的输出为y^k=(y^1k,y^2k,...,y^lk)\hat y_k=(\hat y_{1}^{k},\hat y_{2}^{k},...,\hat y_{l}^{k})y^k=(y^1k,y^2k,...,y^l