神经网络=神经网络模型+优化算法

通过阅读周志华老师的《机器学习》,收货颇丰,突然意识到神经网络的构成,我认为,就是神经网络模型+优化算法,以下内容如有侵权,立即删除。

1.神经元模型

神经网络的核心单元是神经元模型,如图一,M-P神经元,图片来着周志华老师的《机器学习》。每个神经元接收多个输入信号,这些信号分别与特定的权重(w)相关联,权重反映了各输入的重要程度。神经元首先对输入信号进行加权求和,然后将结果与预设阈值进行比较,最后通过激活函数(Activation Function)进行非线性转换,从而产生输出信号。

图一 神经元模型示意图

其数学表达式为:

\hat{y}=f(\sum_{i=1}^{n}x_{i}w_{i}-\theta )

其中:

\hat{y}为神经元输出值(这里我加了帽子,和图中有所差距,以便后面理解,其含义为预测值);

x为输入;

w为权重;

\theta为阈值;

f(x)为激活函数,典型的有sigmoid(x),sgn(x)函数,这里读者可以自己去搜索一下,此文不过多介绍激活函数。

2.感知机

神经网络重最简单的模型,感知机模型,它只由两层神经网络构成,输入层与输出层,也可以理解为就是一个神经元模型。基本模型不过多赘述,与M-P神经元模型相同,这里我介绍一下感知觉是如何寻找最优的权重和阈值的。

2.1对阈值的处理

在进行优化寻优时,如果要将权重w与阈值\theta作为不同目标进行优化,这可能会增加代码的复杂性,这时我们可以引入“哑结点”,将阈值\theta也作为一个待优化的第n+1个权重,但其输入固定为-1。就是说将阈值\theta也看做一个权重,但其输入固定为1。这样就可以单纯化为权重优化:

2.2权重优化算法

w_{i}=w_{i}+\Delta w_{i}

\Delta w_{i}=\eta (y-\hat{y})

其中\eta为学习率,大小于(0,1)之间,(y-\hat{y})为真实值-预测值,可以衡量他们之间的差距,当真实值大于\Delta w_{i}小于0,w_{i}就会减小,x_{i}w_{i}也就会变小,从而使\hat{y}接近y。理论上听起来是不是可以解决的问题挺多的,但实际上由于感知机的结构过于简单,其只能处理一下简单的线性可分问题,这里我用《机器学习》中的一张图解释。

图二

3.多层神经网络

在输出层与输入层直接,增加隐藏层,其就变成了多层神经网络,图三,如果优化多层神经网络中的权重和阈值,由于继续使用2.2中的优化算法,显然不行了。

图三 多层神经网络结构图

其中:
我写的黑色字分布为输出该层的阈值,输出有l个,输入有d个,隐藏层神经节点有q个,其余可根据图中意义理解一下,不赘述了哈。

3.1BP优化算法

其中一共有l*(q+1)+q*(h+1)个待优化的参数。

现假设训练集中一个训练例(x,y),这只是一个训练集中的一个例子,假设其神经网络预测值为\hat{y}=(y_{1},y_{2},...,y_{l}),j为1到l之间应该任意的数,则有

y_{j}=f(\beta _{j}-\theta _{j})

均分误差为:

E_{k}=\frac{1}{2}\sum_{j=1}^{l}(\hat{y_{j}}-y_{j})^{2}

这里引入\frac{1}{2}是为了方便后面求导。类似于之前的更新公式:

w_{hj}=w_{hj}+\Delta w_{hj}

\Delta w_{hj}=-\eta \frac{\partial E_{k}}{\partial w_{hj}}

根据链式法则:

\Delta w_{hj}=-\eta \frac{\partial E_{k}}{\partial \hat{y_{j}}}\frac{\partial \hat{y_{j}}}{\partial \beta _{j}}\frac{\partial \beta _{j}}{\partial w_{i}}

最终计算得到:

\Delta w_{hj}=ng_{j}b_{h}

类似该过程,可得到其余参数的更新策略。

在上述过程中,我们只是考虑了训练集中的一个例子,还有许多例子未曾考虑进去,假设有n个例子,我们可以通过计算累计误差:

E=\frac{1}{n}\sum_{i=1}^{n}E_{k}

考虑所有例子的误差,来更新权重。

不至于BP优化算法来寻得权重与阈值的最优解,还可以通过其他算法,比如遗传算法,模拟退火算法、粒子群算法等启发式算法来寻找最优解。

3.2防止过拟合

改变误差函数:

E=\lambda \frac{1}{n}\sum_{i=1}^{n}E_{k}+(1-\lambda )\sum_{j}w_{j}^{2}

通过引入\lambda与正规项,我们可以使E更偏向于比较小的w,通过调整\lambda的大小,通过调整这种偏差的大小。

补充:例子代码改天再写吧,今日有点累了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值