手写识别

任务:给定一个手写数字的image,预测出该数字是几?

特征提取:提取该image的像素点灰度值作为输入。例如一个书写数字的图片为64*64像素点,那么输入x向量的维数为4096.

建立模型:采用前向神经网络模型,每个神经元是sigmoid模型,多层神经元构成神经网络。输入是4096个像素点的灰度值,x1,...x4096 ,xi是介于0~1之间的数值。输出是一个十维的向量,y=(y1,...y10),每个yi也是介于0~1之间,是一个概率值。

训练模型:用已知的手写数字图片与真实值 训练模型,将已知的手写数字图片的像素点灰度值作为输入,输入到模型中,得到预测的输出y,将所有输入的预测输出值与真实值的误差用来更新模型参数。我们用  

                          

来表示预测误差,通过使得这个误差逐渐减小达到不断的更新模型参数的目的。这个函数我们称为目标函数。

优化:我们的目标是,求使得目标函数最小时的模型参数。求这个目标函数的最小值,可以通过求解析解的方法得到,若没有解析解,则需要通过一些优化方法才能得到。这里我们的模型参数很多,无法直接求得解析解,因此采用梯度下降法来不断优化目标函数。
梯度下降法:函数中任意一点的梯度方向是函数变化最快的方向。正梯度方向是函数增大最快的方向,负梯度方向是函数下降最快的方向。

对于有着很多变量的目标函数C,该如何计算梯度呢?

反向传播算法:具体的步骤见图

 

posted @ 2016-10-27 15:05 beaglebone 阅读(...) 评论(...) 编辑 收藏