[学习笔记]数据挖掘-week4
人工神经网络单一神经元一个单独的神经元又称为感知机(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\su
人工神经网络
单一神经元
一个单独的神经元又称为感知机(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,if∑i=0nwi⋅xi>0otherwise={1,0,ifw0+w1⋅x1+...+wn⋅xn>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)=21d∈D∑(td−od)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)=[∂w0∂E,...,∂wn∂E]wi←wi+ΔwiwhereΔwi=−η∂wi∂E
η\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}∂wi∂E=∂wi∂21d∈D∑(td−od)2=21d∈D∑∂wi∂(td−od)2=21d∈D∑2(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
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+e−x1
该函数的值域为[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}∂oj∂Ed∂netj∂oj∂netj∂EdΔwjiEd(w)=21k∈output∑(tk−ok)2Δwji=−η∂wji∂Ed∂wji∂Ed=∂netj∂Ed⋅∂wji∂netj∂netj∂Ed=∂oj∂Ed⋅∂netj∂ojnetj表示j的输入=∂oj∂21k∈output∑(tj−oj)2=∂oj∂21(tj−oj)2=−(tj−oj)=∂netj∂σ(netj)=oj(1−oj)=−(tj−oj)oj(1−oj)=η(tj−oj)oj(1−oj)xji
对于输出层,整体的原理与感知机是一样的。对于非输出层,差别在于误差计算。输出层的误差通过tj−ojt_j-o_jtj−oj计算,非输出层的误差是通过后一层的误差乘以两层之间的权重得到。
更多推荐
所有评论(0)