diff --git a/recognize_digits/README.md b/recognize_digits/README.md
index d04e24e6..5ee732a7 100644
--- a/recognize_digits/README.md
+++ b/recognize_digits/README.md
@@ -1,221 +1,125 @@
# 手写字符识别教程
## 背景介绍
-当我们学习编程的时候,编写的第一个程序一般是实现打印"Hello World"。而就像编程语言有"Hello World",机器学习则有 [MNIST](http://yann.lecun.com/exdb/mnist/) 数据库。MNIST数据库是手写字符,属于机器学习中典型的图像分类问题,而由于其问题简单,数据集完备,因此常常被作为机器学习入门的教程。
+当我们学习编程的时候,编写的第一个程序一般是实现打印"Hello World"。而机器学习(或深度学习)的入门教程,一般都是 [MNIST](http://yann.lecun.com/exdb/mnist/) 数据库上的手写识别问题。原因是手写识别属于典型的图像分类问题,比较简单,同时MNIST数据集也很完备。
+
+MNIST数据集作为一个简单的计算机视觉数据集,包含一系列如图1所示的手写数字图片和对应的标签。图片是28x28的像素矩阵,而标签则对应着0~9的10个数字。每张图片都经过了大小归一化和居中处理。
-MNIST数据库作为一个简单的计算机视觉数据集,包含一系列如下的手写数字:
-
- 分类器 |
- 预处理 |
- 测试误差 |
- 参考文献 |
-
-
-
- linear classifier (1-layer NN) |
- none |
- 12.0 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
- linear classifier (1-layer NN) |
- deskewing |
- 8.4 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
- 2-layer NN, 300 hidden units, mean square error |
- none |
- 4.7 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
-2-layer NN, 300 HU |
- deskewing |
- 1.6 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
- 2-layer NN, 800 HU, Cross-Entropy Loss |
- none |
- 1.6 |
- [Simard et al., ICDAR 2003] (https://www.microsoft.com/en-us/research/publication/best-practices-for-convolutional-neural-networks-applied-to-visual-document-analysis/) |
-
-
-
- Convolutional net LeNet-1 |
- subsampling to 16x16 pixels |
- 1.7 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
- Convolutional net LeNet-4 |
- none |
- 1.1 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
- Convolutional net LeNet-5, [no distortions] |
- none |
- 0.95 |
- [LeCun et al. 1998] (http://yann.lecun.com/exdb/publis/index.html#lecun-98) |
-
-
-
-
+该数据库的提供者Yann LeCun,早先在手写字符识别上做了很多研究,并在研究过程中提出了卷积神经网络(Convolutional Neural Network),大幅度地提高了手写字符的识别能力,也因此成为了深度学习领域的奠基人之一。如今的深度学习领域,卷积神经网络占据了至关重要的地位,从最早Yann
+LeCun提出的简单LeNet,到如今ImageNet大赛上的优胜模型VGGNet、GoogLeNet、ResNet等(我们将在下一章中介绍这三个模型),人们在图像分类领域,利用卷积神经网络得到了一系列惊人的结果。
-从上表中,我们可以大致看出模型从简单到复杂的过程中,测试误差逐渐降低。
+自从该数据集发布以来,有很多算法在MNIST上进行实验。1998年,LeCun分别用单层线性分类器、多层感知器(Multilayer Perceptron, MLP)和多层卷积神经网络LeNet进行实验,使得测试集上的误差不断下降(从12%下降到0.7%)。此后,科学家们分别基于K近邻(K-Nearest Neighbors)算法、支持向量机(SVM)、神经网络和Boosting方法在该数据集上做了大量实验,并采用多种预处理方法(如去除歪曲(deskewing),去噪(noise removal),模糊(blurring)等等)来提高识别的准确率。
-本章中,我们希望通过简单的模型带大家入门利用神经网络进行图像识别,并逐步深入进行模型优化。
+本章中,我们从简单的模型Softmax回归开始,带大家入门手写字符识别,并逐步进行模型优化。
## 模型概览
-###问题说明:
-基于MNIST数据,我们希望训练一个分类器 $f$,对于每张给定的图片数据 $X$ ,预测结果为 $ Y = f(x) $ ,应该尽可能准确的接近真实标签L。
-
-
-### Softmax回归(Softmax Regression)
-
-这是一个多分类问题,神经网络中通常使用 `softmax` 函数计算多分类问题中每一类的概率。为了熟悉 `softmax` 函数,我们定义最简单的多分类网络:将输入层经过一个线性映射得到的特征,直接通过 `softmax` 函数进行多分类。
+这是一个分类问题,基于MNIST数据,我们希望训练一个分类器 $f$。输入为MNIST数据库的图片, $28\times28$ 的二维图像,为了进行计算,我们一般将上将 $28\times28$ 的二维图像转化为 $n(n=784)$ 维的向量,因此我们采用$x_i(i=0,1,2,...,n-1)$(向量表示为$X$)来表示输入的图片数据。对于每张给定的图片数据 $X$,我们采用$ y_i (i=0,1,2,..9)$(向量表示为 $Y$来表示预测的输出,预测结果为 $ Y = f(X) $。然后,我们用 $label_i$ (向量表示为$L$)来代表标签,则预测结果 $Y$ 应该尽可能准确的接近真实标签 $L$。
-MNIST数据库的图片为 $28X28$ 的二维图像,为了进行计算,我们一般将上将 $28X28$ 的二维图像转化为 $n(n=784)$ 维的向量,因此我们采用$x_i(i=0,1,2,...,n-1)$(向量表示为$X$)来表示输入的图片数据。同时,我们采用$ y_i (i=0,1,2,..9)$(向量表示为 $Y$来表示预测的输出,其含义为:
+$Y$和$L$具体含义为:比如说,$y_i$组成的向量$Y$为[0.2,0.3,0,1,0,0.1,0.1,0.1,0.1,0],每一维分别代表图像数字预测为0~9的概率;而此时$label_i$组成的向量$L$可能为[0,1,0,0,0,0,0,0,0,0],其代表标签为1,即输入$X$代表图片的数字为1。则$Y$和$L$尽可能接近的意思是$Y$中概率最大的一维为$L$中对应的标签,并且概率越大则代表越接近。
-比如说,$y_i$组成的向量$Y$为[0.2,0.3,0,1,0,0.1,0.1,0.1,0.1,0],每一维分别代表图像数字预测为0~9的概率。然后,我们用 $label_i$ (向量表示为$L$)来代表预测的输出。输入层的数据X传到 `softmax` 层,在激活操作之前,会乘以相应的权重 $W$ ,并加上偏置变量 $b$ ,具体如下:
+下面我们一一介绍本章中使用的三个分类器Softmax回归、多层感知器、卷积神经网络。
-$$ net_i = \sum_j W_{i,j}x_j + b_i $$
-`net` 是激活前的值(仅仅进行了矩阵乘法),然后再用 `softmax` 函数进行激活。
+### Softmax回归(Softmax Regression)
-其中 `softmax` 函数的定义如下:
+神经网络中通常使用 $softmax$ 函数计算多分类问题中每一类的概率。为了熟悉 $softmax$ 函数,我们定义最简单的多分类网络:将输入层经过一个线性映射得到的特征,直接通过 $softmax$ 函数进行多分类。
-$$ softmax(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}} $$
+输入层的数据X传到 $softmax$ 层,在激活操作之前,会乘以相应的权重 $W$ ,并加上偏置变量 $b$ ,具体如下:
-即:
+$$ y_i = softmax(\sum_j W_{i,j}x_j + b_i) $$
-$$ y_i = \frac{e^{net_i}}{\sum_j e^{net_j}} $$
+其中 $ softmax(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}} $
-在神经网络中,多分类问题一般用 `softmax` 函数来作为输出。对于有 `N` 个类别的多分类问题,指定 `N` 个输出节点,`N` 维输入特征经过 `softmax` 将归一化为 `N` 个[0,1]范围内的实数值,分别表示该样本属于这N个类别的概率。此处的 $y_i$ 即对应该图片为数字 `i` 的预测概率。
+对于有 $N$ 个类别的多分类问题,指定 $N$ 个输出节点,$N$ 维输入特征经过 $softmax$ 将归一化为 $N$ 个[0,1]范围内的实数值,分别表示该样本属于这N个类别的概率。此处的 $y_i$ 即对应该图片为数字 $i$ 的预测概率。
-以下为softmax回归的网络图:
+图2为softmax回归的网络图,图中权重用黑线表示,偏置用红线表示,+1代表偏置参数的系数为1。