机器学习——神经网络

什么是神经网路

我们这里讲的是人工神经网络,这是一种机器学习算法,简单的说就是一种模拟人脑的学习算法,它能通过学习一定的数据,从而对相同事物的具有一定的判断能力。


神经元

我们的神经网络就是相当于多个神经元的连接。下图是一个神经元:


下图是三个输入的神经元模型


对比两图,细胞核部分就是我们的输入a1,a2,a3,而轴突部分就是我们的权重w1,w2,w3,Sum就是下一个神经元,我们称为输出,也是此神经元的输入。


感知机

感知机是最简单的神经网络,它只有输入和输出两层。上图的神经元模型就是一个感知机。

接下来是计算。

首先我们要给模型上的权重随机赋值,为了计算的方便,我们都用矩阵进行计算,所以w=[w1,w2,w3],然后和线性回归一样,和输入a=[a1,a2,a3]相乘并带入激活函数,得到输出z。然后还没有结束,我们还要对权重进行优化,类似于线性回归中的寻找最优的系数theta,反复此操作,直到我们得到较好的权重,这样我们的训练就完成了。


多层神经网络

感知机简单,但只能做简单的线性分类问题。所以人们摸索出了多层的神经网络。

多层神经网络其实就是在输入和输出层之间增加了隐藏层,例如下图:


这个神经网络就是多了一层隐藏层,计算过程和感知机是类似的。


神经网络的算法中包括两种算法,一种是前向传播算法,一种是反向传播算法。

前向传播算法

前向传播算法是比较简单的,就是输入层的数据和随机得到的权重进行矩阵乘法,从而得到第二层的值,并把这些值作为输入去计算第三层的值,以此类推。这就是前向传播算法

反向传播算法

开始时,我们的权重是随机得到的,这肯定不能满足我们的精度要求,而反向传播算法就是用于更新权重的。

当一次前向传播算法完成,我们的到了对于训练集的预测值,这时就要用反向传播算法。

首先是求输出层的误差:

err=f'(Oj)*(y-Oj)

(err表示当前神经元的误差,f'表示激活函数的导数,y是样本对应的label,Oj是用对应样本计算出的预测值。)

然后是隐藏层的误差:

err=f'(Oj)*errk*wk

(errk表示上面计算出的与此神经元相连的那个神经元的误差,wk表示这两个相连神经元之间的权重)

接下来就是更新我们的权重了:

w=w+l*err*Oj

(w表示权重;l表示学习率,因为这其实是采用了梯度下降的方法进行权重的更新,所以我们要设计学习率来疗伤我们的移动步长;err和Oj就是对应位置的误差和预测)

这样我们就得到了反向传播的使用方法。


另外,我们一般会设计编置节点,编置节点是没有输入的,且存储值永远为1,如下图中是b(1),b(2),


考虑了偏置节点后,我们的计算也会有点小是差异,


并且,在更新权重的我们也要更新偏置节点,方法为:

b=b+l*err

现在,结合前向传播算法和反向传播算法,我们就可以写一个简单的神经网络了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值