使用神经网络识别手写数字
感知器(Perceptrons)
感知器是人工神经网络的第一个里程碑,是一种决策机制
感知器的工作方式:接受若干个二进制输入x1, x2...,产生一个二进制输出
具体细节:
引入权重w1,w2...表示相应输入对于输出的重要性,分配权重后的总和和指定的阈值进行比较,得到输出0或1
感知器偏置(b)的由来:
将阈值移到不等式的另一边,使得b=-threshold代替
感知器=>逻辑运算(与、或、非门)
感知器=>阶跃函数
台大林轩田课程上对于感知器的解释.png
S型神经元(Sigmoid neurons)
问题描述:任何权重(或偏置)中的微小改变可以引起一个输出的微小改变,但是网络中单个感知器上一个权重或偏置的微小改动有时候会引起那个感知器的输出完全翻转。
解决措施:引入S型神经元
特点:任何权重(或偏置)中的微小改变可以引起一个输出的微小改变,而不是巨大变化=>平滑的感知器
微小变化.png
神经网络的架构(The architecture of neural networks)
关于MLP:由于历史的原因,尽管是一个多层的神经网络神经元由S型神经元而不是感知器构成,这种多层网络有时被称为多层感知器或者MLP。
前馈神经网络:以上一层的输出作为下一层的输入,网络中没有回路
递归神经网络:具有休眠前会在一段有限的时间内保持激活状态的神经元,这种激活状态可以刺激其它神经元,使其随后被激活并同样保持一段有限的时间,随着时间的推移,得到一个级联的神经元激活系统。
一个简单的分类手写数字的网络(A simple network to classify handwritten digits)
手写数字的识别问题有两个方面的问题:
1、一系列数字的分割
2、单个数字的识别
这里主要解决第二个问题
网络结构.png
这里有个问题,为什么用10个输出神经元而不是4个神经元,因为4个输出神经元每一个当作一个二进位值,结果取决于它的输出更靠近0还是1 ,可以表示16中可能的输出。
经验主义:10个的输出比4个好。
使用梯度下降算法进行学习(Learning with gradient descent)
希望有一个算法,能够帮助我们找到权重w和偏置b,以至于网络的输出y(x)能够拟合所有的输入x,为了量化如何实现这个目标,定义代价函数C(w, b)。
代价函数中,比较真实y和预测y,举个例子:C(w, b) = ypre - y,如果训练算法完美的话,C = 0,换句话说,我们的目的是最小化权重和偏置的代价函数C(w, b),为了实现这个目的,使用梯度下降算法。
抛开深度学习中一系列的细节,目前的问题就是有一个多元函数C(v),希望使用梯度下降的技术使得C(v)最小化
C(v)
v = v1, v2, . . .
想象:将函数想象成一个山谷,有一个球体会从山谷的斜坡滚落,模拟球体滚落到谷底的运动
在v1和v2方向分别将球体移动一个很小的量,即∆v1和∆v2,C的变化为
∆C.png
希望的结果是∆C为负,这样就表明球体是在往下滚落
这个时候定义一个C的梯度,表示其为偏导数的向量,用∇C 来表示梯度向量
∇C .png
那么C的微小变化为: ∆C ≈ ∇C · ∆v
因为想要∆C为负,所以可以选取 ∆v = -a∇C(a为一个很小的正数,称为学习速率),那么
∆C ≈ −a·∇C·∇C = −a∥∇C∥2
这样子保证了∆C<=0
也就是说通过计算∆v,来移动球体的位置v
v → v′ = v−a∇C
总结一下,
1.梯度下降算法工作的方式就是重复计算梯度 ∇C,然后沿着相反的方向移动,沿着山谷“滚落”。
2.梯度下降法是一种在C下降最快的方向上做微小变化的方法
回到神经网络中,可以利用梯度下降算法去寻找能使得方程 C的代价取得最小值的权重w和偏置b
wk → wk′ =wk − a∂C/∂wk
bl → b′l =bl − a∂C/∂bl
通过重复应用这一更新规则我们就能“让球体滚下山”,并且有望能找到代价函数的最小值。 换句话说,这是一个能让神经网络学习的规则。
实践中,需要为每个训练输入x单独的计算梯度∇Cx,然后求平均值,由于数据庞大,花费时间长
解决方案:SGD,通过随机选取小量训练输入样本来计算 ∇Cx,进而估算梯度∇C
SGD的极端版本:mini_bath_size设置为1,针对每一个样本都进行一次w,b的更新,这样的过程叫做在线学习(online)
实现我们的网络来分类数字(Implementing our network to classify digits)
使用少于100行的代码来实现一个数字分类器
复杂的算法 ≤ 简单的学习算法 + 好的训练数据
迈向深度学习(Toward deep learning)
神经网络的直观理解:将一个问题划分为多个子问题
如果我们能够使用神经网络来解决这些子问题,那么我们也许可以通过将这些解决子问题的网络结合起来,构成一个人脸检测的神经网络
确定一幅图像是否显示有人脸:
问题划分.png
子问题划分.png
网友评论