1.神经网络分类
前馈神经网络:在网络中,当前层的输入只依赖于前一层的节点输出,与更早的网络输出状态无关;
反馈神经网络:将输出经过一步时移再接入到输入层,输入不仅仅取决于上一层节点的输出;
BP神经网络: 在百度百科上的解释是一种按照误差逆向传播算法训练的多层前馈神经网络。BP即Back Propagation,就是常用的反向传播算法。
2.激活函数
激活函数又称为非线性映射函数,讲神经元的输入映射到输出。常用的激活函数包括:Sigmoid型函数、tanh(x)型函数、ReLU(修正线性单元)、Leaky ReLU、参数化ReLU、随机化ReLU和ELU(指数化线性单元)。
3.目标函数
目标函数是计算预测结果和真实结果的误差。目标函数可以分为分类任务的目标函数和回归任务的目标函数。
分类任务的目标函数包括:交叉熵损失函数、合页损失函数、坡道损失函数、大间隔交叉熵损失函数、中心损失函数。
回归任务的目标函数包括:L1损失函数、L2损失函数、Tukey’s biweight损失函数。
4.超参数
神经网络主要超参数包括:输入图像像素、学习率、正则化参数、神经网络层数、批处理大小、卷积层参数(卷积核大小、卷积操作步长、卷积核个数)、汇合层参数(汇合核大小、汇合步长)、目标函数、优化算法、激活函数、学习周期等。
下图中红色的为输出层 紫色为隐藏层 绿色为输出层
神经元的基本计算方式如下图:
双层神经网络:
三种常用的激活函数
阶跃函数:当输入小于等于0时,输出0;当输入大于0时,输出1。
Sigmoid:当输入趋近于正无穷/负无穷时,输出无限接近于1/0。
ReLU:当输入小于0时,输出0;当输入大于0时,输出等于输入。
其中,阶跃函数输出值是跳变的,且只有二值,较少使用;Sigmoid函数在当x的绝对值较大时,曲线的斜率变化很小(梯度消失),并且计算较复杂;ReLU是当前较为常用的激活函数。
激活函数具体是怎么计算的呢?
假如经过公式H=X*W1+b1计算得到的H值为:(1,-2,3,-4,7…),那么经过阶跃函数激活层后就会变为(1,0,1,0,1…),经过ReLU激活层之后会变为(1,0,3,0,7…)。
需要注意的是,每个隐藏层计算(矩阵线性运算)之后,都需要加一层激活层,要不然该层线性计算是没有意义的。
激活函数的选择:
如果使用线性激活函数,最终得到的结果仍然是输入变量x的线性组合,即使用神经网络与直接使用线性模型的效果并没有什么两样。即便是包含多层隐藏层的神经网络,如果使用线性函数作为激活函数,最终的输出仍然是输入x的线性模型。这样的话神经网络就没有任何作用了。因此,隐藏层的激活函数必须要是非线性的。
如果所有的隐藏层全部使用线性激活函数,只有输出层使用非线性激活函数,那么整个神经网络的结构就类似于一个简单的逻辑回归模型,失去了神经网络模型本身的优势和价值。
但如果是预测问题而不是分类问题,输出y是连续的情况下,输出层的激活函数可以使用线性函数。如果输出y恒为正值,也可以使用ReLU激活函数,这里需要具体问题具体分析。
BP算法:通过输出层的值来计算误差的偏导数(残差),再用这个偏导数和前面的隐藏层进行加权求和,如此一层一层的向后传下去,直到输入层(不计算输入层),最后利用每个节点求出的偏导数来更新权重,然后用更新后的权重再计算输出值,重复上述步骤不断更新每一层之间的权重,直到误差达到接受水平即可
网络训练过程:
a.初始化权重,通过前向传播,计算网络的输出;
b.使用代价函数衡量当前的预测与真实值的误差;
c.使用梯度下降,将误差反向传播(链式法则),修改网络权值;
d.循环,直到网络误差达到目标要求停止,应用训练好的模型对测试样本训练;