前言
神经网络是模仿生物的神经网络来做的一种机器学习方法,可以分类也可以回归。
本质就是:一组输入,分别给所有的 隐藏层神经元(假设隐藏层只有一层),接受到输入的每一个神经元,经过激活函数的计算和自身的偏置b(bias),输出给下一层的所有神经元(如果隐藏层只有一层,那么下一层就是输出层),下一层神经元接受到输入之后,同样经过激活函数的计算和自身的偏置,得到每个输出层神经元的最终输出。
如果是分类模型,那么输出层的神经元个数,就是总的类别数目,如果是回归模型,那么输出层的神经元个数就是1个或者多个,如果是多个,需要对每个输入做加权平均或者数值平均,最终得到1个输出值,也是模型的预测值。
神经元
接受多个不同的输入,给下一层神经元同样的输出。生物神经元有数突和轴突,数突负责接收输入,轴突负责输出。只不过生物神经网络,有细胞核的蛋白质以及细胞核自身的偏置(个性)来决定是否输出,机器学习中的神经元,由激活函数和自身偏置来决定输出的值,但是无论值多少,都会有输出。
激活函数
每一层神经元的输出值应该是多少,由激活函数来计算,通常用Sigmoid函数:
损失函数
输出值:与观测值(样本值)
的误差平方最小:
BP网络
BP: backward propgation,反向传播。也就是说,通过误差反向修正各层参数来重复训练,最终得到理想的神经网络模型(确定了各层的参数、隔层偏置、函数最小)的神经网络,我们称为BP网络。
误差反向传播:
假设有一个3层的BP网络:输入层(2个神经元)、隐藏层(4个神经元)、输出层(2个神经元)
隐藏层的输入:
隐藏层的输出:,这里 f 是 Sigmoid函数
输出层的输入:
输出层的输出:,这里 f 是 Sigmoid函数
那么根据Loss函数,分别计算 ,
,
,
,
以为例,当计算出
之后,用
、
等等重新训练。
如何计算呢?求梯度,并且梯度=0,也就是下降最快的下一个移动点(调整点):
,
这里u是激活函数,比如sigmoid,称为学习率或者步长,通常用一个很小的数来表示,比如 0.1。
目前没有确切理论支撑的是:
神经网络应该有多少层,每层多少个神经元,只能凭实战经验。