手写数字识别
人脑识别图像:
计算机识别图像:
神经元:
Sigmoid神经元:
神经网络结构:
输入层 隐藏层 输出层
两个隐藏层的神经网络
MultiLayer Perceptions (MLP): 实际是sigmoid neurons, 不是perceptrons
假设识别一个手写图片:
如果图片是64*64, 输入层总共有64*64 = 4096个神经元
如果图片是28*28, 输入层总共有28*28 = 784个神经元
如果输出层只有一个神经元, >0.5说明是9, <0.5说明不是9
FeedForward Network: 神经网络中没有循环, 信息单项向前传递
用神经网络识别手写数字:
分层:segmentation分层得到:
对于第一个数字:
用以下神经网络识别:
输入层: 28x28 = 784个神经元
每个神经元代表一个像素的值:0.0全白,1.0全黑
一个隐藏层: n个神经元, 例子中 n=15
输出层: 10个神经元,分别代表手写数字识别可能的0~9十个数字,
例如: 第一个神经元(代表0)的输出值=1, 其他的<1, 数字被识别为0
隐藏层学习到不同的部分:
决定:
得名: 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
通常可以用微积分解决,如果v包含的变量过多,无法用微积分解决.
假设一个小球在曲面上的某一点,滚动到最低点
一个变量的情况:
可能会陷入局部最优
前提是目标函数要是凸函数convex
learning rate自动会减小
目标函数:
变化量:
设定:
所以C不断减小
回顾目标函数: