多层神经网络
《python machine learning 》chapter 12 Implementing a Multilayer Artificial Neural Network from Scratch
【主要内容】
(1)总体理解多层神经网络
(2)从头开始实施神经网络训练的基本反向传播算法
(3)训练基本的神经网络用语图像分类
【单层神经网络概要】
ADAptive LInear NEuron (Adaline): https://blog.****.net/Amy_mm/article/details/79668201
【多层神经网络体系结构】
完全连接的网络也叫做多层感知机 ——Multilayer Perceptron (MLP)
上图为一个三层MLP,包括输入层,隐藏层,输出层。当隐藏层多于一层时,也叫做深层神经网络deep artificial neural
network.——DNN.
如上图所示,我们将网络中第L层的第i单元的**函数写作,为了是代码以及数学公式看起来更加直观,用上标in,h,out分别代表输入层,隐藏层以及输出层。
,
即代表偏置值,设为1.
输入层的**函数为:
字母说明:
层的每个单元都与
的每个单元通过权值系数相连接 , 这样我们将第
层的第K个单元与第
层的第j个单元之间的权值系数写为
. 将输入层与隐藏层之间的权值矩阵写为
,隐藏层与输出层之间的权值矩阵为
。
看一下3-4-3的多层感知机展示图
【通过向前传播**神经网络】
本节主要介绍用向前传播算法(forward propagation)计算MLP(多层感知机模型)的输出的过程。
【MLP学习过程】
1、从输入层开始,通过网络向前传播训练集数据来产生输出。
2、基于网络的输出,操作cost函数计算错误。
3、向后传播这个错误,计算错误对于网络中每个权值系数的导数,更新模型。
重复上述三个步骤多次得到MLP的权值系数,用向前传播方法计算网络输出,定义临界函数,用one-hot表示预测的类标签。
【详细过程】
计算隐藏层第一个单元的**函数
是网络输入,
是**函数,由于要解决像图像处理之类的比较复杂的问题,这里采用非线性函数作为我们MLP模型的**函数
,比如sigmoid函数,将输入数据映射为一个逻辑分布,取值为0-1之间。
为了便于书写和阅读,将上述公式写成向量的形式,码代码的时候也可以直接用numpy计算代替循环。
指输入样本的1*m维特征向量加上偏置项。
m*d维权值矩阵,d是隐藏层单元数。二者相乘的1*d维矩阵
,并由此得到**函数。
泛化到n个样本集上,可得到
即输入层的n*m维矩阵,
m*d维权值矩阵,矩阵相乘得到n*d维矩阵
,运用
得到下一层的**函数
同理可得输出层的**函数