Deep Learning - 1 神经网络

Artificial Neuron

人工神经元有:es6

  • Perceptrons(感知机)
  • Sigmoid

Perceptron

感知机input是多个二进制output是一个二进制算法

graph LR x1((x1))-->B((perceptron)) x2((x2))-->B x3((x3))-->B B-->output((output))

感知机规则

\[output= \begin{cases} 0& \text{if } \sum_{j}w_{j}x_{j}\le \text{threshold}\\ 1& \text{if } \sum_{j}w_{j}x_{j}\gt \text{threshold} \end{cases} \]
  • x是evidence
  • w是weight权值
  • threshold是阈值

感知机经过赋予不一样evidence权值,升高或下降threshold来达到做出决策的目的。网络

  • 其中,$\sum_w_x_能够用向量点积表示为\cdot$
  • threshold从不等式右侧移至左侧,并用bias(偏置)表示,\({b}\equiv{-threshold}\)

更新后的感知机规则:app

\[output= \begin{cases} 0& {w}\cdot{x}+b\le0\\ 1& {w}\cdot{x}+b\gt0 \end{cases} \]

bias能够理解为使神经元被激活的容易度的度量。ide

咱们经过设计 Learning Algorithm 去自动地调整 Network of Artificial Neuron 的 Weights 和 Biases。这种调整,能够对外部刺激做出响应。函数

Sigmoid Neurons

网络经过学习 Weights 和 Biases 以便最终正确地分类。咱们但愿在网络的 Weights 和 Biases 上做出一些小的改变时,只会引发输出上的小幅变化。只有这样,学习才变得可能。经过不断地修改 Weights 和Biases 来产生愈来愈好的结果。学习

若是网络中包含感知机的话,轻微的改变甚至会致使感知机的输出彻底翻转,很难实现逐步改变 Weights 和 Biases 来使网络行为更加接近预期。ui

Sigmoid 神经元在轻微改变 Weights 和 Biases 时只会引发小幅的输出变化。这是因为 Sigmoid 神经元构成的网络可以学习的关键因素。spa

graph LR x1((x1))-->S((Sigmoid)) x2((x2))-->S x3((x3))-->S S-->O((Output))

输入和输出都是介于0到1之间的浮点数。设计

\[\sigma(z)=\frac{1}{1+e^{-z}} \]

将 Evidence,Weight,Bias 代入$\sigma$,输入是$\cdot+b$,输出是

\[\sigma({w}\cdot{x}+b)=\frac{1}{1+exp^{(-{w}\cdot{x}-b)}} \]

sigmoid function

step function

Sigmoid 神经元使用 \(\sigma\) 函数,若是将 \(\sigma\) 函数换成 Setp(阶跃) 函数,就变成了感知机。

\(\sigma\) 函数的平滑属性,让咱们在 \(\triangle w_{j}\)\(\triangle b\) 轻微改变时,神经元的输出也只是轻微地变化 \(\triangle output\)

\(\sigma\) 有时也被称做 Logistic Function,对应的神经元被称为 Logistic Neurons。

Activation Function 主要有:

  • Sigmoid
  • Maxout
  • ReLu

Loss Function 主要有:

  • Mean Squared Error(均方偏差)
  • Cross Entropy(交叉熵)

神经网络的结构

神经网络的结构

  • 一个神经元只有一个输出,多个输出箭头仅表示它的输出被用做其它几个神经元的输入。
  • 这个网络有4层,2个隐藏层。
  • Hidden Layers 的第1层经过赋予输入的 evidence 权重,作出了3个很是简单的决策。第2层赋权重给第1层的决策结果,来做出决策。经过这种形式,一个多层网络能够做出更加复杂精细的决策。
  • 出于历史缘由,这样的多层网络又叫作 Multilayer Perception(MLP)多层感知机。可是构成网络的并不是感知机,而是 Sigmoid 神经元。

对于判断一个手写数字是否是9这个问题,咱们使用$64\times64$的灰度图像。

输入层须要4096个神经元,每一个神经元接收标准化的0-1之间的灰度值。

输出层须要一个神经元,用于分类。

Normalization

标准化是将数据按比例缩放,使之落入一个小的特定区间。

好处有
  • 提高模型的收敛速度
  • 可能提升模型的精度
方法有

Min-Max Normalization 线性归一化

\[x'=\frac{x-min(x)}{max(x)-min(x)} \]

Z-Score Standardization

\[x'=\frac{x-\mu}{\sigma} \]

非线性归一化

\[x'=\frac{ln(x)}{ln(max(x))} \]

FeedForward Neural Networks

前馈神经网络,是把上一层的输出,做为下一层的输入。信息老是向前传播,从不反向回馈。

用简单的网络结构去识别手写数字

数据是$28\times28$的灰度图像

  1. 输入层要784个神经元,接收0-1之间的标准化灰度值。
  2. 输出层要10个神经元,哪一个神经元的激活值最高,咱们认为数字是哪一个。
  3. 隐藏层设置n个神经元,实验不一样的n的取值。

神经网络从根本原理上在作什么?

为何输出层用10个神经元?神经元输出二进制的话,$2^4=16$,用4个神经元就足够了。

隐藏层在作什么?

隐藏层的第1个神经元用于检测图像中是否存在特定模式。若是有,它会对特定模式在图像中对应部分的像素赋予较大的权重,对其它部分赋予较小的权重。

隐藏层的第2个神经元会检测另外一种模式。若是有,也会给对应部分的像素较大权重,其它像素较小权重。

输出层在作什么?

输出层有10个神经元,它的第1个神经元经过权衡从隐藏层获得的信息,告诉咱们这个数字是否是0。若是输出层的第1个神经元检测到隐藏层的某几个神经元被激活,那么能够推断这个数字是0。

Gradient Descent

Cost Function

代价函数,有的地方也叫

  • Loss Function,损失函数
  • Objective Function,目标函数

咱们训练神经网络的目的,是寻找合适的 Weights 和 Biases 来最小化代价函数。

MSE代价函数:

\[C(w,b)=\frac{1}{2n}\sum_{x}||y(x)-a||^2 \]
  • y(x)是预期的输出结果
  • a是激活函数的输出结果

梯度降低法

梯度降低法,是一种能够解决最小化问题的技术。

在$v_{1}\(方向上移动很小的量\)\triangle v_{1}$,在$v_{2}\(方向移动很小的量\)\triangle v_{2}$,C将会发生以下变化:

\[\triangle C \approx \frac{\partial C}{\partial v_{1}}\triangle v_{1}+\frac{\partial C}{\partial v_{2}}\triangle v_{2} \]
  • $\triangle C$是C的变化
  • $\triangle v_{1}$是$v_{1}$的变化
  • $\triangle v_{2}$是$v_{2}$的变化

咱们用$\triangle v$来描述v的变化

\[\triangle v \equiv (\triangle v_{1},\triangle v_{2})^T \]

用$\nabla C$表示梯度向量

\[\nabla C=\left(\frac{\partial C}{\partial v_{1}},\frac{\partial C}{\partial v_{2}}\right)^T \]

这样,C发生的变化能够表示为

\[\triangle C\approx \nabla C \cdot \triangle v \]

若是想让C一直下降,$\triangle C$就得是负的。

咱们能够这样选取$\triangle v$,以确保$\triangle C$为负数:

\[\triangle v= - \eta \nabla C \]

$\eta$是很小的正数,也就是 Learning Rate。这样,

\[\triangle C \approx - \eta || \nabla C ||^2 \]

从而保证$\triangle C \le 0$。

若是从为止v移动到v',变化$\triangle v$为

\[v \rightarrow v' = v - \eta \nabla C \]

而后反复迭代地更新,C会一直下降到咱们想要寻找的全局最小值。

梯度降低法工做原理

梯度降低算法工做的方式是重复计算梯度$\nabla C$,而后沿着梯度的反方向运动,即下山坡。

同时,梯度降低法也被视为一种经过在C降低最快的方向上作微小变化,来使得C当即降低的方法。

Stochastic Gradient Descent

Cost Function能够这样写:

\[C_{x} = \frac{||y(x)-a||^2}{2} \]
\[C = \frac{1}{n} \sum_x C_x \]
  • $C_x$是每一个独立训练样本的代价函数
  • C是每一个样本代价的平均值

这样,咱们要为每一个样本x单独计算梯度值$\nabla C_x$,而后求和再求平均值

\[\nabla C = \frac{1}{n} \sum_x \nabla C_x \]

梯度降低可能会花费大量时间,学习缓慢。

SGD随机梯度降低,每次随机选取少许输入样原本计算$\nabla C_x$和$\nabla C$,少许样本能够快速获得梯度$\nabla C$,加快梯度降低过程,进而加速学习过程。

SGD工做原理

SGD将训练数据随机打散,而后划分为多个大小为m的 mini-batch 。

经过计算随机选取的mini-batch的梯度来估计总体的 Gradient ,更新 Weights 和 Biases 。

\[w_k \rightarrow w_k' = w_k - \eta \nabla C = w_k - \frac{\eta}{m} \sum_x \nabla C_x \\ b_l \rightarrow b_l' = b_l - \eta \nabla C = b_l - \frac{\eta}{m} \sum_x \nabla C_x \]

用这个 mini-batch 更新完 Weights 和 Biases 后,再选取另外一个 mini-batch去训练,直到咱们用完全部训练数据,就完成了一个 epoch 训练。

Online Learning

也叫 Incremental Learning ,是 mini-batch=1 时的梯度降低极端版本。

相关文章
相关标签/搜索