什么是人工神经网络
ANN能干什么?
数学近似映射(函数逼近)
神经网络模型和网络结构
建立和应用神经网络的步骤
网络结构的确定
包含网络的拓扑结构和每个神经元相应函数的选取;
权值和阈值的确定
通过学习得到,为有指导的学习,也就是利用已知的一组正确的输入、输出数据,调整权和阈值使得网络输出与理想输出偏差尽量小;
工作阶段
用带有确定权重和阈值的神经网络解决实际问题的过程,也叫模拟(simulate)。
神经元信息传递
神经元的信息传递和处理是一种电化学活动.树突由于电化学作用接受外界的刺激;通过胞体内的活动体现为轴突电位,当轴突电位达到一定的值则形成神经脉冲或动作电位;再通过轴突末梢传递给其它的神经元.从控制论的观点来看;这一过程可以看作一个多输入单输出非线性系统的动态过程。
人工神经元的模型
作为神经网络的基本元素,神经元的模型如下:
神经元的输出与输入的关系为:净激活量:neti=∑j=1nwijxj−θ=∑j=0nwijxj激活函数:yi=f(neti)若用X表示输入向量,用W表示权重向量:X=[x0,x1,x2,...,xn],W=[wi0,wi1,wi2,...,win]T则neti=XW,yi=f(XW)神经元的输出与输入的关系为:\\ 净激活量:net_i=\sum_{j=1}^{n}w_{ij}x_j-θ=\sum_{j=0}^{n}w_{ij}x_j\\ 激活函数:y_i=f(net_i)\\ 若用X表示输入向量,用W表示权重向量:\\ X=[x_0,x_1,x_2,...,x_n],W=[w_{i0},w_{i1},w_{i2},...,w_{in}]^T\\ 则net_i=XW,y_i=f(XW) 神经元的输出与输入的关系为:净激活量:neti=j=1∑nwijxj−θ=j=0∑nwijxj激活函数:yi=f(neti)若用X表示输入向量,用W表示权重向量:X=[x0,x1,x2,...,xn],W=[wi0,wi1,wi2,...,win]T则neti=XW,yi=f(XW)
激活函数
激活函数是对净激活量与输出进行映射的函数。一些常用的激活函数, 由于输入数据与期望值之间可能并不是量级一样,所以需要激活。
线性函数
f(x)=k∗x+cf(x)=k*x+c f(x)=k∗x+c
阈值函数
f(x)={T,x>ck∗x,∣x∣≤c−T,x<−cf(x)= \begin{cases} T,x>c\\ k*x,|x|≤c\\ -T,x<-c \end{cases} f(x)=⎩⎨⎧T,x>ck∗x,∣x∣≤c−T,x<−c
S形函数
f(x)=11+e−αxf(x)=\frac{1}{1+e^{-αx}} f(x)=1+e−αx1
双极S形函数
f(x)=21+e−αx−1f(x)=\frac{2}{1+e^{-αx}}-1 f(x)=1+e−αx2−1
S形函数和双极S形函数图像为:
S形和双极S形函数的导函数均为连续函数。
网络模型
根据网络中神经元的互联方式的不同,网络模型分为:
前馈神经网络
只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到到达输出层,层间没有向后的反馈信号
反馈神经网络
从输出到输入具有反馈连接的神经网络,其结构比前馈网络要复杂得多
自组织网络
通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构。
工作状态
神经网络的工作状态分为学习和工作两种状态
学习
利用学习算法来调整神经元间的连接权重,使得网络输出更符合实际
工作
神经元间的连接权值不变,可以作为分类器或者预测数据之用。
学习方式
学习分为有导师学习与无导师学习
有导师学习
将一组训练集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权
例如:BP算法
无导师学习
抽取样本集合中蕴含的统计特性,并以神经元之间的联接权的形式存于网络中。
例如:Hebb学习率
BP算法(Back Propagation)
采用BP学习算法的前馈神经网络称为BP神经网络
BP算法基本原理
利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。
信号的正向传播&误差的反向传播
正向传播:
– 输入样本---输入层---各隐层---输出层
判断是否转入反向传播阶段:
– 若输出层的实际输出与期望的输出不符
误差反传
– 误差以某种形式在各层表示---修正各层单元的权值
网络输出的误差减少到可接受的程度进行到预先设定的学习次数为止
假设输入层有n个神经元,隐含层有p个神经元 ,输出层有q个神经元
符号定义
输入向量;
x=(x1,x2,...,xn)x=(x_1,x_2,...,x_n) x=(x1,x2,...,xn)
隐含层输入向量;
hi=(hi1,hi2,...,hip)hi=(hi_1,hi_2,...,hi_p) hi=(hi1,hi2,...,hip)
隐含层输出向量;
ho=(ho1,ho2,...,hop)ho=(ho_1,ho_2,...,ho_p) ho=(ho1,ho2,...,hop)
输出层输入向量;
yi=(yi1,yi2,...,yiq)yi=(yi_1,yi_2,...,yi_q) yi=(yi1,yi2,...,yiq)
输出层输出向量;
yo=(yo1,yo2,...,yoq)yo=(yo_1,yo_2,...,yo_q) yo=(yo1,yo2,...,yoq)
期望输出向量;
do=(d1,d2,...,dq)d_o=(d_1,d_2,...,d_q) do=(d1,d2,...,dq)
误差函数
e=12∑o=1q(do(k)−yoo(k))2e=\frac{1}{2}\sum_{o=1}^q(d_o(k)-yo_o(k))^2 e=21o=1∑q(do(k)−yoo(k))2
首先,计算各层神经元的输入和输出
hih(k)=∑i=0nwhixi(k),h=1,2,...,phoh(k)=f(hih(k)),h=1,2,...,pyio(k)=∑i=0pwohhoh(k),o=1,2,...,qyoo(k)=f(yio(k)),o=1,2,...,qhi_h(k)=\sum_{i=0}^nw_{hi}x_i(k),h=1,2,...,p\\ ho_h(k)=f(hi_h(k)),h=1,2,...,p\\ yi_o(k)=\sum_{i=0}^pw_{oh}ho_h(k),o=1,2,...,q\\ yo_o(k)=f(yi_o(k)),o=1,2,...,q hih(k)=i=0∑nwhixi(k),h=1,2,...,phoh(k)=f(hih(k)),h=1,2,...,pyio(k)=i=0∑pwohhoh(k),o=1,2,...,qyoo(k)=f(yio(k)),o=1,2,...,q
第二步利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数。
∂e∂woh=∂e∂yio∂yio∂woh∂e∂yio=∂(12∑o=1q(do(k)−yoo(k))2)∂yio=−(do(k)−yoo(k))yoo′(k)=−(do(k)−yoo(k))f′(yio(k))≜−δo(k)∂yio(k)∂woh=∂(∑hpwohhoh(k))∂woh=hoh(k)\frac{∂e}{∂w_{oh}}=\frac{∂e}{∂yi_o}\frac{∂yi_o}{∂w_{oh}}\\ \frac{∂e}{∂yi_o}=\frac{∂(\frac{1}{2}\sum_{o=1}^q(d_o(k)-yo_o(k))^2)}{∂yi_o}=-(d_o(k)-yo_o(k))yo'_o(k)=-(d_o(k)-yo_o(k))f'(yi_o(k))≜-δ_o(k)\\ \frac{∂yi_o(k)}{∂w_{oh}}=\frac{∂(\sum_h^pw_{oh}ho_h(k))}{∂w_{oh}}=ho_h(k) ∂woh∂e=∂yio∂e∂woh∂yio∂yio∂e=∂yio∂(21∑o=1q(do(k)−yoo(k))2)=−(do(k)−yoo(k))yoo′(k)=−(do(k)−yoo(k))f′(yio(k))≜−δo(k)∂woh∂yio(k)=∂woh∂(∑hpwohhoh(k))=hoh(k)
第三步:利用隐含层到输出层的连接权值、输出层的δ _ o(k)和隐含层的输出计算误差函数对隐含层各神经元的偏导数δ_h(k)。
∂e∂woh=∂e∂yio∂yio∂woh=−δo(k)hoh(k)∂e∂whi=∂e∂hih(k)∂hih(k)∂whi∂hih(k)∂whi=∂(∑i=0nwhixi(k))∂whi=xi(k)∂e∂hih(k)=∂(12∑o=1q(do(k)−yoo(k))2)∂hoh(k)∂hoh(k)∂hih(k)=∂(12∑o=1q(do(k)−f(yio(k)))2)∂hoh(k)∂hoh(k)∂hih(k)=∂(12∑o=1q((do(k)−f(∑o=1qwhohoh(k))2))∂hoh(k)∂hoh(k)∂hih(k)=−∑o=1q(do(k)−yoo(k))f′(yio(k))who∂hoh(k)∂hih(k)=−(∑o=1qδo(k)who)f′(hih(k))≜−δh(k)\frac{∂e}{∂w_{oh}}=\frac{∂e}{∂yi_o}\frac{∂yi_o}{∂w_{oh}}=-δ_o(k)ho_h(k)\\ \frac{∂e}{∂w_{hi}}=\frac{∂e}{∂hi_h(k)}\frac{∂hi_h(k)}{∂w_{hi}}\\ \frac{∂hi_h(k)}{∂w_{hi}}=\frac{∂(\sum_{i=0}^nw_{hi}x_i(k))}{∂w_{hi}}=x_i(k)\\ \frac{∂e}{∂hi_h(k)}=\frac{∂(\frac{1}{2}\sum_{o=1}^q(d_o(k)-yo_o(k))^2)}{∂ho_h(k)}\frac{∂ho_h(k)}{∂hi_h(k)}=\frac{∂(\frac{1}{2}\sum_{o=1}^q(d_o(k)-f(yi_o(k)))^2)}{∂ho_h(k)}\frac{∂ho_h(k)}{∂hi_h(k)}\\ =\frac{∂(\frac{1}{2}\sum_{o=1}^q((d_o(k)-f(\sum_{o=1}^qw_{ho}ho_h(k))^2))}{∂ho_h(k)}\frac{∂ho_h(k)}{∂hi_h(k)}=-\sum_{o=1}^q(d_o(k)-yo_o(k))f'(yi_o(k))w_{ho}\frac{∂ho_h(k)}{∂hi_h(k)}\\ =-(\sum_{o=1}^qδ_o(k)w_{ho})f'(hi_h(k))≜-δ_h(k) ∂woh∂e=∂yio∂e∂woh∂yio=−δo(k)hoh(k)∂whi∂e=∂hih(k)∂e∂whi∂hih(k)∂whi∂hih(k)=∂whi∂(∑i=0nwhixi(k))=xi(k)∂hih(k)∂e=∂hoh(k)∂(21∑o=1q(do(k)−yoo(k))2)∂hih(k)∂hoh(k)=∂hoh(k)∂(21∑o=1q(do(k)−f(yio(k)))2)∂hih(k)∂hoh(k)=∂hoh(k)∂(21∑o=1q((do(k)−f(∑o=1qwhohoh(k))2))∂hih(k)∂hoh(k)=−o=1∑q(do(k)−yoo(k))f′(yio(k))who∂hih(k)∂hoh(k)=−(o=1∑qδo(k)who)f′(hih(k))≜−δh(k)
第四步,利用输出层各神经元的δ _ o(k)和隐含层各神经元的输出来修正连接权值w_oh(k)。
△woh(k)=−μ∂e∂woh=μδo(k)hoh(k)wohN+1=wohN+μδo(k)hoh(k)μ是设置的学习率△w_{oh}(k)=-μ\frac{∂e}{∂w_{oh}}=μδ_o(k)ho_h(k)\\ w_{oh}^{N+1}=w_{oh}^N+μδ_o(k)ho_h(k)\\ μ是设置的学习率 △woh(k)=−μ∂woh∂e=μδo(k)hoh(k)wohN+1=wohN+μδo(k)hoh(k)μ是设置的学习率
第五步,利用隐含层各神经元的δ _ h(k)和输入层各神经元的输入修正连接权。
△whi(k)=−μ∂e∂whi=δh(k)xi(k)whiN+1=whiN+μδh(k)xi(k)△w_{hi}(k)=-μ\frac{∂e}{∂w_{hi}}=δ_h(k)x_i(k)\\ w_{hi}^{N+1}=w_{hi}^N+μδ_h(k)x_i(k) △whi(k)=−μ∂whi∂e=δh(k)xi(k)whiN+1=whiN+μδh(k)xi(k)
第六步,计算全局误差
E=12m∑k=1m∑o=1q(do(k)−yo(k))2E=\frac{1}{2m}\sum_{k=1}^{m}\sum_{o=1}^{q}(d_o(k)-y_o(k))^2 E=2m1k=1∑mo=1∑q(do(k)−yo(k))2
第七步,判断网络误差是否满足要求。当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。否则,选取下一个学习样本及对应的期望输出,返回进入下一轮学习。
上一篇:【leetcode】滑动窗口模板