Perceptrons
输入x1, x2…是二进制输入,产生一个二进制输出。
感知器可以用作一种决策器。
感知器可以当作NAND门。
1
2output= 0 if w⋅x+b≤0
1 if w⋅x+b>0
权重或者偏差(阈值)轻微的变动会引起结果的很大的变化。
假设我们采用感知器(Perceptrons)网络中的所有权重和偏差,并将它们乘以正常数c,c> 0。神经网络的行为不会更改。
Sigmoid neurons
输入x1, x2…在0~1之间,产生一个在0~1之间的输出。
sigmoid函数:σ(z)≡1/1+e^(−z), z ≡ wx + b。
1
2output = 1/(1+exp(−∑jwjxj−b))
Δoutput ≈ (∑j∂output/∂wj)Δwj+(∂output/∂b)Δb
权重或者偏差(阈值)轻微的变动会引起结果较小的变化。
假设我们采用Sigmoid神经元网络中的所有权重和偏差,并将它们乘以正常数c,c> 0。当c→∞时,神经网络的行为就是感知器网络的行为。
The architecture of neural networks
输入层、输入神经元
输出层、输出神经元
隐层、隐层神经元
前馈神经网络:前一层的输出作用于后一层的输入(没有回路)
递归神经网络
输入和输出神经元的设计通常比较简单。比如一个64x64的灰度图像是否是“9”,则输入神经元有4096个,输出神经元只有一个
A simple network to classify handwritten digits
启发式方法识别数字(所以直接识别0-9更容易而不是以4位二进制的方式来识别)
Learning with gradient descent
成本函数:C(w,b) ≡ 1/2n(∑x∥y(x)−a∥^2),a是输出向量
成本函数值越接近0,说明输出值和拟合的输出值越接近
ΔC ≈ (∂C/∂v1)Δv1 + (∂C/∂v2)Δv2, Δv ≡ (Δv1,…,Δvm)^T, 梯度向量∇C ≡ (∂C/∂v1,…,∂C/∂vm)^T
所以 ΔC ≈ ∇C⋅Δv,令Δv = −η∇C,则 ΔC ≈ −η∇C⋅∇C = −η∥∇C∥^2,所以ΔC≤0,则梯度下降ΔC
更新规则:通过 v→v′=v−η∇C 来更新v(位置)值,η:学习率
可以证明,令 ∥Δv∥=ϵ 当 Δv = −η∇C 时,C下降的最大
利用梯度下降,找出最合适的w和b使成本函数值最小:使用权值和偏差代替上式的v,也就是说v有两个分量w、b,那么更新规则变为:1
2wk→w′k=wk−η∂C/∂wk
bl→b′l=bl−η∂C/∂bl
请注意,此成本函数的形式为C = 1/n(ΣxCx),也就是说,它是针对个别培训样例的平均成本为 Cx ≡ ∥y(x)-a∥^2。实际上,为了计算梯度∇C,我们需要分别为每个训练输入x计算梯度∇Cx,然后对它们求平均值,∇C=1/nΣx∇Cx。那么当训练的输入非常多的时候,会造成神经网络的学习速度低下
随机梯度下降:其思想是通过计算随机选择的训练输入的小样本的∇Cx来估计梯度∇C。通过对这个小样本进行平均,我们可以快速得到真实梯度∇C的良好估计,这有助于加快梯度下降,从而学习。即从所有样本中取一部分样本(mini-batch)进行输入,并近似的认为[(∑m,j=1)∇CXj]/m ≈ (∑x∇Cx)/n = ∇C
我们可以通过计算随机选择的小批量的梯度来估计总梯度。1
2wk→w′k=wk−η/m(∑j∂CXj/∂wk)
bl→b′l=bl−η/m(∑j∂CXj/∂bl)
然后选择另一个随机选择的小批量进行训练。直到我们用完样本的输入,就说完成了一轮(epochs)训练。那时我们重新开始一论新的训练
增量学习:将小批量的大小设定为1。那么输入一个x,就更新权重和偏差。然后重新选择另一个输入,更新权重和偏差。
Implementing our network to classify digits
1 | """ |
1 | """ |