手写数字识别

人脑识别图像:
 手写数字识别_第1张图片

手写数字识别_第2张图片


人脑: 大脑视觉皮层V1, 包含140,000,000神经元; 数百亿个连接, 还有V2,V3,V4,V5
         人脑进化几千年
手写数字识别_第3张图片

计算机识别图像:
手写数字识别_第4张图片

手写数字识别_第5张图片
手写数字识别_第6张图片


神经元:
手写数字识别_第7张图片

输入00, (−2)∗0+(−2)∗0+3=3,    输出1
输入11, (−2)∗1+(−2)∗1+3=−1, 输出0

与非门可以模拟任何方程!

手写数字识别_第8张图片
Sigmoid神经元:

手写数字识别_第9张图片
8->9

为了模拟更细微的变化,输入和输出数值从0和1,到0,1之间的任何数




神经网络结构:
手写数字识别_第10张图片
输入层                隐藏层                       输出层




手写数字识别_第11张图片


两个隐藏层的神经网络
MultiLayer Perceptions (MLP): 实际是sigmoid neurons, 不是perceptrons

 假设识别一个手写图片:


如果图片是64*64, 输入层总共有64*64 = 4096个神经元
如果图片是28*28, 输入层总共有28*28 = 784个神经元

如果输出层只有一个神经元, >0.5说明是9, <0.5说明不是9

FeedForward Network: 神经网络中没有循环, 信息单项向前传递


用神经网络识别手写数字:
手写数字识别_第12张图片
分层:segmentation分层得到:



对于第一个数字:

手写数字识别_第13张图片

用以下神经网络识别:
手写数字识别_第14张图片

输入层: 28x28 = 784个神经元
每个神经元代表一个像素的值:0.0全白,1.0全黑

一个隐藏层: n个神经元, 例子中 n=15

输出层: 10个神经元,分别代表手写数字识别可能的0~9十个数字,
例如: 第一个神经元(代表0)的输出值=1, 其他的<1, 数字被识别为0

隐藏层学习到不同的部分:


手写数字识别_第15张图片 手写数字识别_第16张图片
决定:
手写数字识别_第17张图片
还可能有很多其他方式做出最终分类决定,所以使用10个神经元在输入层


梯度下降(gradient descent):

MNIST dataset:  http://yann.lecun.com/exdb/mnist/

得名: Modified National Institute of Standards and Technology 

训练数据集: 60,000 张图片 => 用来训练
测试数据集: 10, 000 张图片 => 用来测试准确率

扫描从250个员工的手写字体而来

x: 训练输入, 28*28 = 784d向量, 每个值代表一个灰度图片中的一个像素值
y=y(x): 10d向量

如果输入的某个图片是数字6
理想输出: y(x)=(0,0,0,0,0,0,1,0,0,0)T

Cost function (loss function, objective function): 目标函数

C: cost
w: weight 权重
b: bias 偏向
n: 训练数据集实例个数
x: 输入值
a: 输出值 (当x是输入时)
||v||:  向量的length function


C(w,b) 越小越好,输出的预测值和真实值差别越小

目标: 最小化C(w,b)


最小化问题可以用梯度下降解决(gradient descent)

C(v) v有两个变量v1, v2
手写数字识别_第18张图片
通常可以用微积分解决,如果v包含的变量过多,无法用微积分解决.

假设一个小球在曲面上的某一点,滚动到最低点

一个变量的情况:
手写数字识别_第19张图片
可能会陷入局部最优
前提是目标函数要是凸函数convex
learning rate自动会减小

手写数字识别_第20张图片


手写数字识别_第21张图片
目标函数:

变化量:



gradient vector

以上三个公式推出:

设定:

   <=0

所以C不断减小

回顾目标函数:

是平均的cost

权重和偏向更新方程:
手写数字识别_第22张图片

对于每个训练实例x, 都要j计算梯度向量gradient vector:  ∇C
如果训练数据集过大, 会花费很长时间,学习过程太慢

所以, 一个变种称为:

随机梯度下降算法 (stochastic gradient descent):

基本思想: 从所有训练实例中取一个小的采样(sample): X1,X2,…,Xm   (mini-batch)
来估计 ∇C, 大大提高学习速度

举例: 选举调查

如果样本够大, 




代入更新方程:
手写数字识别_第23张图片

然后,重新选择一个mini-batch用来训练,直到用完所有的训练实例,一轮epoch完成





你可能感兴趣的:(机器学习)