神经网络入门

神经网络与深度学习 (Michael Nielsen) \text{(Michael Nielsen)} (Michael Nielsen)笔记(一)
1. 感知器工作原理

图片名称

一个感知器接受几个二进制输入, x 1 , x 2 , … x_{1}, x_{2}, \dots x1,x2,,并产生一个二进制输出。上图中,感知器有三个输入 x 1 , x 2 , x 3 x_{1}, x_{2}, x_{3} x1,x2,x3。通常可以更多或更少。引入权重 w 1 , w 2 , … w_{1}, w_{2}, \dots w1,w2,,表示相应输入对输出重要性的实数。神经元的输出 0 0 0 1 1 1,由分配权重后的总和 ∑ j w j x j \sum_{j} w_{j} x_{j} jwjxj小于或大于一些阈值决定。和权重一样,阈值是一个实数,也是神经元的一个参数。更精确的代数形式:  output  = { 0  if  ∑ j w j x j ≤  threshold  1  if  ∑ j w j x j >  threshold  \text { output }=\left\{\begin{array}{ll}{0} & {\text { if } \sum_{j} w_{j} x_{j} \leq \text { threshold }} \\ {1} & {\text { if } \sum_{j} w_{j} x_{j}>\text { threshold }}\end{array}\right.  output ={01 if jwjxj threshold  if jwjxj> threshold 
2. S S S型神经元
S S S型函数: σ ( z ) ≡ 1 1 + e − z \sigma(z) \equiv \frac{1}{1+e^{-z}} σ(z)1+ez1
S S S神经元对每个输入权重 w 1 , w 2 , … w_{1}, w_{2}, \dots w1,w2,,和一个总的偏置 b b b,输出不再是 0 0 0 1 1 1,而是 σ ( w ⋅ x + b ) \sigma(w \cdot x+b) σ(wx+b)一个具有输入 x 1 , x 2 , … x_{1}, x_{2}, \dots x1,x2,,权重 w 1 , w 2 , … w_{1}, w_{2}, \dots w1,w2,,偏置 b b b S S S型神经元的输出是: 1 1 + exp ⁡ ( − ∑ j w j x j − b ) \frac{1}{1+\exp \left(-\sum_{j} w_{j} x_{j}-b\right)} 1+exp(jwjxjb)1 S S S型函数图像:

图片名称

σ \sigma σ的平滑意味着权重和偏置的微小变化,即 Δ w j \Delta w_{j} Δwj Δ b \Delta b Δb,会从神经元产生一个微小的输出变化 Δ output \Delta \text{{output}} Δoutput,微积分上 Δ output \Delta \text{{output}} Δoutput可以近似表示为 Δ  output  ≈ ∑ j ∂  output  ∂ w j Δ w j + ∂  output  ∂ b Δ b \Delta \text { output } \approx \sum_{j} \frac{\partial \text { output }}{\partial w_{j}} \Delta w_{j}+\frac{\partial \text { output }}{\partial b} \Delta b Δ output jwj output Δwj+b output Δb3. 神经网络架构:输入层,输入神经元、隐藏层、输出层,输出神经元

图片名称

4. 使用梯度下降法进行学习
代价函数: C ( w , b ) ≡ 1 2 n ∑ x ∥ y ( x ) − a ∥ 2 C(w, b) \equiv \frac{1}{2 n} \sum_{x}\|y(x)-a\|^{2} C(w,b)2n1xy(x)a2这里 w w w表示所有的网络权重的集合, b b b是所有的偏置, n n n是训练输入数据的个数, a a a表示当输入为 x x x时输出的向量,求和是在总的训练输入 x x x上进行的。把称为二次代价函数,有时也称为均方误差或者 MSE \text{MSE} MSE

v 1 v_1 v1 v 2 v_2 v2方向上移动很小的量,即 Δ v 1 \Delta v1 Δv1 Δ v 2 \Delta v2 Δv2 C C C将会有如下变化: Δ C ≈ ∂ C ∂ v 1 Δ v 1 + ∂ C ∂ v 2 Δ v 2 \Delta C \approx \frac{\partial C}{\partial v_{1}} \Delta v_{1}+\frac{\partial C}{\partial v_{2}} \Delta v_{2} ΔCv1CΔv1+v2CΔv2我们要寻找一种选择 v 1 v_1 v1 v 2 v_2 v2的方法使得 Δ C \Delta C ΔC为负,定义 Δ v \Delta v Δv v v v变化的向量, Δ v ≡ ( Δ v 1 , Δ v 2 ) T \Delta v \equiv\left(\Delta v_{1}, \Delta v_{2}\right)^{T} Δv(Δv1,Δv2)T
定义 C C C的梯度为偏导数的向量, ( ∂ C ∂ v 1 , ∂ C ∂ v 2 ) T \left(\frac{\partial C}{\partial v_{1}}, \frac{\partial C}{\partial v_{2}}\right)^{T} (v1C,v2C)T,用 ∇ C \nabla C C来表示梯度向量,即: ∇ C ≡ ( ∂ C ∂ v 1 , ∂ C ∂ v 2 ) T \nabla C \equiv\left(\frac{\partial C}{\partial v_{1}}, \frac{\partial C}{\partial v_{2}}\right)^{T} C(v1C,v2C)T这样 Δ C \Delta C ΔC的表达式可以被重写为: Δ C ≈ ∇ C ⋅ Δ v \Delta C \approx \nabla C \cdot \Delta v ΔCCΔv这个方程让我们看到了如何取 Δ v \Delta v Δv才能让 Δ C \Delta C ΔC为负数,假设选取 Δ v = − η ∇ C \Delta v=-\eta \nabla C Δv=ηC这里 η \eta η是个很小的正数,称为学习速率。于是有 Δ C ≈ − η ∇ C ⋅ ∇ C = − η ∥ ∇ C ∥ 2 \Delta C \approx-\eta \nabla C \cdot \nabla C=-\eta\|\nabla C\|^{2} ΔCηCC=ηC2 ∥ ∇ C ∥ 2 ≥ 0 \|\nabla C\|^{2} \geq 0 C20保证了 Δ C ≤ 0 \Delta C \leq 0 ΔC0按照这样的规则去改变 v v v,那么 C C C会一直减小,不会增加。因此我们可以用 Δ v \Delta v Δv来移动位置 v v v: v → v ′ = v − η ∇ C v \rightarrow v^{\prime}=v-\eta \nabla C vv=vηC假设 C C C是一个有 m m m个变量 v 1 , … , v m v_{1}, \dots, v_{m} v1,,vm的多元函数,那么对 C C C中自变量的变化 Δ v = ( Δ v 1 , … , Δ v m ) T \Delta v=\left(\Delta v_{1}, \ldots, \Delta v_{m}\right)^{T} Δv=(Δv1,,Δvm)T Δ C \Delta C ΔC会变为: Δ C ≈ ∇ C ⋅ Δ v \Delta C \approx \nabla C \cdot \Delta v ΔCCΔv,梯度 ∇ C \nabla C C是向量 ∇ C ≡ ( ∂ C ∂ v 1 , … , ∂ C ∂ v m ) T \nabla C \equiv\left(\frac{\partial C}{\partial v_{1}}, \dots, \frac{\partial C}{\partial v_{m}}\right)^{T} C(v1C,,vmC)T我们可选取 Δ v = − η ∇ C \Delta v=-\eta \nabla C Δv=ηC 使得 Δ C ≈ ∇ C ⋅ Δ v \Delta C \approx \nabla C \cdot \Delta v ΔCCΔv保证是负数,这给出了一种方式从梯度中去取得最小值。
神经网络中的梯度下降算法
其原理是利用梯度下降法寻找使得代价函数 C C C取得最小值的权重 w k w_{k} wk和偏置 b l b_l bl
用权重和偏置取代 v v v,梯度向量 ∇ C \nabla C C则有相应的分量 ∂ C ∂ w k \frac{\partial C} {\partial w_{k}} wkC ∂ C ∂ b l \frac{\partial C} {\partial b_{l}} blC,用这些分量来写梯度下降的更新规则,我们得到: w k → w k ′ = w k − η ∂ C ∂ w k w_{k} \rightarrow w_{k}^{\prime}=w_{k}-\eta \frac{\partial C}{\partial w_{k}} wkwk=wkηwkC b l → b l ′ = b l − η ∂ C ∂ b l b_{l} \rightarrow b_{l}^{\prime}=b_{l}-\eta \frac{\partial C}{\partial b_{l}} blbl=blηblC随机梯度下降算法
改写 C = 1 n ∑ x C x C=\frac{1}{n} \sum_{x} C_{x} C=n1xCx C x ≡ ∥ y ( x ) − a ∥ 2 2 C_{x} \equiv \frac{\|y(x)-a\|^{2}}{2} Cx2y(x)a2,在实践中,为了计算梯度 ∇ C \nabla C C,我们需要为每个训练输入 x x x单独计算梯度值 ∇ C x \nabla C_{x} Cx,然后求平均值, ∇ C = 1 n ∑ x ∇ C x \nabla C=\frac{1}{n} \sum_{x} \nabla C_{x} C=n1xCx,当训练输入的数量过大时会使得学习变得相当缓慢,而随机梯度下降算法能够加速学习,其思想时通过选取小量训练输入样本来计算 ∇ C x \nabla C_{x} Cx,进而估计梯度 ∇ C \nabla C C。通过计算少量样本的平均值我们可以快速得到一个对于实际梯度 ∇ C \nabla C C的很好的估算,这有助于加速学习过程。
具体地,随机梯度下降通过随机选取小量的 m m m个训练输入来工作。我们将这些随机色训练输入标记为 X 1 , X 2 , … , X m X_{1}, X_{2}, \ldots, X_{m} X1,X2,,Xm,并把它们称为一个小批量数据 (mini-batch) \text{(mini-batch)} (mini-batch),假设样本数量 m m m足够大,我们期望 ∇ C X j \nabla C_{X_{j}} CXj的平均值大致相等于整个 ∇ C x \nabla C_{x} Cx的平均值,即 ∑ j = 1 m ∇ C X j m ≈ ∑ x ∇ C x n = ∇ C \frac{\sum_{j=1}^{m} \nabla C_{X_{j}}}{m} \approx \frac{\sum_{x} \nabla C_{x}}{n}=\nabla C mj=1mCXjnxCx=C ∇ C ≈ 1 m ∑ j = 1 m ∇ C X j \nabla C \approx \frac{1}{m} \sum_{j=1}^{m} \nabla C_{X_{j}} Cm1j=1mCXj w k → w k ′ = w k − η m ∑ j ∂ C X j ∂ w k w_{k} \rightarrow w_{k}^{\prime}=w_{k}-\frac{\eta}{m} \sum_{j} \frac{\partial C_{X_{j}}}{\partial w_{k}} wkwk=wkmηjwkCXj b l → b l ′ = b l − η m ∑ j ∂ C X j ∂ b l b_{l} \rightarrow b_{l}^{\prime}=b_{l}-\frac{\eta}{m} \sum_{j} \frac{\partial C_{X_{j}}}{\partial b_{l}} blbl=blmηjblCXj其中求和符号是在当前小批量数据中的所有训练样本 X j X_{j} Xj上进行,然后我们再挑选另一随机选定的小批量数据去训练。直到我们用完了所有的训练输入,这被称为完成了一个训练迭代期 (epoch) \text{(epoch)} (epoch),然后我们就会开始一个新的训练迭代期。

  《 Neural Networks and Deep Learning 》 Michael Nielsen 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值