人工神经网络

单一神经元

感知机
一个单独的神经元又称为感知机(perceptrons)。公式定于如下:

o={1,if∑i=0nwi⋅xi>00,otherwiseo(x1,...,xn)={1,ifw0+w1⋅x1+...+wn⋅xn>00,otherwise\begin{aligned} o & = \begin{cases} 1,\quad & \text{if}\quad\sum_{i=0}^nw_i\cdot x_i > 0\\ 0,\quad & \text{otherwise} \end{cases} \\[2ex] o(x_1,...,x_n) & = \begin{cases} 1, \quad & \text{if}\quad w_0+w_1\cdot x_1+...+w_n\cdot x_n > 0 \\ 0, \quad & \text{otherwise} \end{cases} \end{aligned}oo(x1,...,xn)={1,0,ifi=0nwixi>0otherwise={1,0,ifw0+w1x1+...+wnxn>0otherwise

上述公式实际是建立了一个判决平面,在坐标轴上将数据一分为二。xix_ixi 表示输入,wiw_iwi 表示权重,其中 x0x_0x0 为1,w0w_0w0 代表偏置,防止判决平面过原点。

通过调整权重,可以让神经元实现不同的功能,为能够找到最适合的权重,通过梯度下降法(gradient descent)来寻找误差最小的权重。

对误差定义如下:

E(w⃗)=12∑d∈D(td−od)2E(\vec{w})=\frac{1}{2}\sum_{d\in D}(t_d-o_d)^2E(w )=21dD(tdod)2

12\frac{1}{2}21 是因为在后续的过程中会求导。ttt 为期望的输出,ooo 为实际的输出。训练集用 DDD 表示。将整个样本集的误差求和的方式为批处理学习(batch learning)。通过误差函数对权重求偏导,可以得到如何更改权重。

∇E(w⃗)=[∂E∂w0,...,∂E∂wn]wi←wi+ΔwiwhereΔwi=−η∂E∂wi\nabla E(\vec{w})=\left[\frac{\partial E}{\partial w_0},...,\frac{\partial E}{\partial w_n}\right]\\[2ex] w_i\gets w_i+\Delta w_i \quad where \quad\Delta w_i=-\eta\frac{\partial E}{\partial w_i}E(w )=[w0E,...,wnE]wiwi+ΔwiwhereΔwi=ηwiE

η\etaη 表示学习率。而前面加负号用于得到正确的调整方向,当误差对权重求偏导时,数值为正数,表示误差会随着权重的增大而增大,那么就需要减少权重。反之毅然。

∂E∂wi=∂∂wi12∑d∈D(td−od)2=12∑d∈D∂∂wi(td−od)2=12∑d∈D2(td−od)∂∂wi(td−od)设o(x)=w⋅x=∑d∈D(td−od)∂∂wi(td−w⋅xd)=∑d∈D(td−od)(−xd)Δwi=η∑d∈D(td−od)xid←Delta Rule\begin{aligned} \frac{\partial E}{\partial w_i} & = \frac{\partial}{\partial w_i}\frac{1}{2}\sum_{d\in D}(t_d-o_d)^2\\[2ex] & = \frac{1}{2}\sum_{d\in D}\frac{\partial}{\partial w_i}(t_d-o_d)^2\\[2ex] & =\frac{1}{2}\sum_{d\in D}2(t_d-o_d)\frac{\partial}{\partial w_i}(t_d-o_d)\\[2ex] &\text{设}\quad o(x) = w\cdot x \\[2ex] & = \sum_{d\in D}(t_d-o_d)\frac{\partial}{\partial w_i}(t_d-w\cdot x_d) \\[2ex] & = \sum_{d\in D}(t_d-o_d)(-x_d)\\[2ex] &\Delta w_i = \eta\sum_{d\in D}(t_d-o_d)x_{id} \gets\text{Delta Rule} \end{aligned}wiE=wi21dD(tdod)2=21dDwi(tdod)2=21dD2(tdod)wi(tdod)o(x)=wx=dD(tdod)wi(tdwxd)=dD(tdod)(xd)Δwi=ηdD(tdod)xidDelta Rule

xidx_{id}xid 为样本的输入。在更新方式中,若是batch learning,先将所有样本走一遍每次对 Δwi\Delta w_iΔwi 做更新,最后再将 Δwi\Delta w_iΔwi 更新到 wiw_iwi 中。若是 stochastic learning,则每次计算直接更行到 wiw_iwi 中。

感知机只能处理线性可分问题。

多个神经元

由多个神经元组合成的网络为人工神经网络,能够解决线性不可分问题。除输入层以外的神经元在输出时需要使用激活函数。常用的激活函数为:

sigmoid(x)=11+e−xsigmoid(x)=\frac{1}{1+e^{-x}}sigmoid(x)=1+ex1

该函数的值域为[0,1]之间,输入数据绝对值越接近 0,导数越大。

多层网络

BP

当上图中的 j 是输出层时。
Ed(w⃗)=12∑k∈output(tk−ok)2Δwji=−η∂Ed∂wji∂Ed∂wji=∂Ed∂netj⋅∂netj∂wji∂Ed∂netj=∂Ed∂oj⋅∂oj∂netjnetj表示j的输入∂Ed∂oj=∂∂oj12∑k∈output(tj−oj)2=∂∂oj12(tj−oj)2=−(tj−oj)∂oj∂netj=∂σ(netj)∂netj=oj(1−oj)∂Ed∂netj=−(tj−oj)oj(1−oj)Δwji=η(tj−oj)oj(1−oj)xji\begin{aligned} &E_d(\vec{w})=\frac{1}{2}\sum_{k\in output}(t_k-o_k)^2 \\[2ex] &\Delta w_{ji}=-\eta\frac{\partial E_d}{\partial w_{ji}} \\[2ex] &\frac{\partial E_d}{\partial w_{ji}}=\frac{\partial E_d}{\partial net_j}\cdot\frac{\partial net_j}{\partial w_{ji}} \\[2ex] &\frac{\partial E_d}{\partial net_j}=\frac{\partial E_d}{\partial o_j}\cdot\frac{\partial o_j}{\partial net_j} \\[2ex] &net_j \text{表示j的输入}\\[2ex] \frac{\partial E_d}{\partial o_j} &=\frac{\partial}{\partial o_j}\frac{1}{2}\sum_{k\in output}(t_j-o_j)^2 \\[2ex] &=\frac{\partial}{\partial o_j}\frac{1}{2}(t_j-o_j)^2 \\[2ex] &=-(t_j-o_j) \\[3ex] \frac{\partial o_j}{\partial net_j} &= \frac{\partial\sigma(net_j)}{\partial net_j}=o_j(1-o_j) \\[2ex] \frac{\partial E_d}{\partial net_j}&=-(t_j-o_j)o_j(1-o_j) \\[2ex] \Delta w_{ji}&=\eta(t_j-o_j)o_j(1-o_j)x_{ji} \end{aligned}ojEdnetjojnetjEdΔwjiEd(w )=21koutput(tkok)2Δwji=ηwjiEdwjiEd=netjEdwjinetjnetjEd=ojEdnetjojnetj表示j的输入=oj21koutput(tjoj)2=oj21(tjoj)2=(tjoj)=netjσ(netj)=oj(1oj)=(tjoj)oj(1oj)=η(tjoj)oj(1oj)xji

对于输出层,整体的原理与感知机是一样的。对于非输出层,差别在于误差计算。输出层的误差通过tj−ojt_j-o_jtjoj计算,非输出层的误差是通过后一层的误差乘以两层之间的权重得到。

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐