TensorFlow 中文社区 MNIST学习笔记

本笔记内容整理自: http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html

官方例子: 辨识手写数字

要实现的功能: 从MNIST数据集中训练, 学习, 实现识别手写数字的功能.

模型思路:

每一张图片包含(28像素*28像素)。我们可以用一个数字数组来表示这张图片:

我们把这个数组展开成一个向量,长度是 28×28 = 784。

于是, 对于给定的一张图片, 可以通过矩阵将图片表示为: [x1, x2, … , x784].

通过神经网络, 将分别对这个矩阵数据进行加权运行, 加上一定的偏移量(bias), 计算出对应0-9的每个数字的概率是多少, 概率最大的那个就是神经经网络判断的结果.

所有步骤可以简化为:

1.

对[x1, x2, ..., x784]通过加权矩阵[W1,1, W1,2, ..., W1,784]计算, 加上偏移b1, 得到X这张图片数字为0的概率;

2.

对[x1, x2, ..., x784]通过加权矩阵[W2,1, W2,2, ..., W2,784]计算, 加上偏移b2, 得到X这张图片数字为1的概率;

3.

 ...... (分别计算为2,3,4,5,6,7,8的概率); 

4.

对[x1, x2, ..., x784]通过加权矩阵[W10,1, W10,2, ..., W10,784]计算, 加上偏移b9, 得到X这张图片数字为9的概率;

5.

得出概率最大的那个即为神经网络运算的结果, 同时如果概率要尽可能接近100%, 则表示结果可信度更好.

这里, 加权矩阵W[784,10], 以及偏移量矩阵b[1,10], 就是我们通过深度学习要挖掘出来的数据, 是我们所有训练, 测试所要达到的目标.

对于softmax回归模型可以用下面的图解释,对于输入的xs加权求和,再分别加上一个偏置量,最后再输入到softmax函数中:

 

其实就是:

y1=softmax(W1,1 * X1 +W1,2 * X2 +W1,3 * X3 + b1)

y2=softmax(W2,1 * X1 +W2,2 * X2 +W2,3 * X3 + b2)

y3=softmax(W3,1 * X1 +W3,2 * X2 +W3,3 * X3 + b3)

我们可以用向量表示这个计算过程:用矩阵乘法和向量相加。这有助于提高计算效率。(也是一种更有效的思考方式)

更进一步,可以写成更加紧凑的方式:

softmax函数的作用: 把Wx+b的输出空间映射到[0, 1]这个区间, 映射得到的值相当于统计意义上的概率, 不同输出值的大小相当于概率的大小.

 

《秦时明月》对话节选

你们以为清除所有不利因素,大秦就能永远稳定下去?
那,以大师之见呢?
山中樱树,虽有花开烂漫之时,然而终归尘土,人的生命不过如此,国之大业,亦不过如此。
樱花的花期不过短短数日,人的生命却有数十载,帝国的霸业更是万世基业,如何能相提并论?
你的眼界,实在太过狭隘。
有一种菌草,日出而生,日落而死,终其一生,不知黎明与黑夜;寒蝉春天生而夏天死,一生不知还有秋天和冬天;相传有一种神木叫做大椿,将八千年当作一个春季,八千年当作一个秋季,殊不知在天地之间,也不过是弹指一瞬,片刻光阴。人生在世,如白驹过隙,国家存于天地,亦不过光年流转,昙花一现。
朝闻道,夕死可矣。章邯浅见,国家与自身皆是如许。
孔子的这句话,引得无数人飞蛾扑火,遗祸不浅。
大师高见,章邯受教了。
你的消息,我已经收到了。
大师的意思是。。。?
师尊的意思是,你可以走了~

——这段对话引用自:《秦时明月》

典故出自《庄子·逍遥游》:朝菌不知晦朔,蟪蛄不知春秋

深度学习相关概念解读

1.过拟合(overfitting):

指一个假设能够很好的拟合训练数据, 却无法在训练数据以外的情况下达到相同的拟合效果. 一般是训练数据太少, 或者是训练数据中存在噪音.

2. 单调函数:

函数在指定的定义域内单调递增或递减.

3.Softmax回归函数:

将神经网络的输出映射到[0,1]这个区间上, 所有输出的累和是1, 满足概率的性质. 我们可以将每个输出映射后得到的值都理解成概率, 在最后对比所有输出节点数据的时候, 就可以选取概率最大的节点作为我们的预测目标.

(图片引用自李宏毅ppt)

4. 学习速度(learning rate):

有的地方翻译为学习率,但还是觉得翻译为学习速度更为直接, 它表示参数到达最优值过程的速度快慢。在神经网络的训练阶段,调整梯度下降算法的学习率可以改变网络权重参数的更新幅度。

形象的例子: 假如你从山峰的最高点根据梯度下降法寻找最优值,当你学习率过大,即下降的快,步子大,那么你很可能会在某一步跨过最优值; 当你学习率过小时,每次下降一厘米,这将走到何年何月呀,用术语来说就是,长时间无法收敛。因此,学习率直接决定着学习算法的性能表现。

一般常用的学习率有0.00001,0.0001,0.001,0.003,0.01,0.03,0.1,0.3,1,3,10.

5.交叉熵(cross entropy)

定义及原理:

(主要参考了知乎: https://www.zhihu.com/question/41252833 )

交叉熵的公式为: \sum_{k=1}^N p_k \log_2 \frac{1}{q_k} ,其中 p_k 表示真实分布, q_k 表示非真实分布

交叉熵,其用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小. 

什么叫真实分布, 什么叫非真实分布?

举例说明如下:

假设一个盒子里面放了800个球, 球的颜色有4种, 颜色种类及数量占比分别为: 橙(1/2),紫(1/4),蓝(1/8), 青(1/8). 表示为 p=(1/2, 1/4, 1/8, 1/8).

这里, 橙(1/2),紫(1/4),蓝(1/8), 青(1/8)就是真实的概率分布.

我们随机从例子4拿出一个球, 让不知道真实概率分布的人来猜球的颜色.

如果这个人用 1/4, 1/4, 1/4, 1/4的概率分布来猜测颜色, 那他猜颜色时所使用的就是非真实分布.表示为 q=(1/4, 1/4, 1/4, 1/4).

交叉熵就是用来衡量在给定真实分布的条件下, 使用非真实分布作为策略消除系统不确定性所需成本的大小.

在交叉熵越小, 策略就越好, 最低的交叉熵也就是使用了真实分布的计算出来的信息熵, 此时 q = p, 交叉熵=信息熵.

在机器学习中的分类算法中, 我们总是最小化交叉熵,因为交叉熵越低, 就证明算法所产生的策略最接近最优策略, 也间接证明我们算法所算出的非真实分布越接近真实分布.

可参考: 吴军 数学之美.
为什么要使用交叉熵?
如下图所示, 一个是通过平方差来描述损失函数, 另一个是通过交叉熵来描述损失函数. 在距离min(Total Loss)比较远的地方, 通过观察斜率, 可以看到平方差的模型在微分后斜率接近于0, 而交叉熵在微分后斜率是比较大的.

因为在min(Total Loss)这个点附近的斜率也是接近于0, 当模型的数据训练到该点附近时, learning rate的值都会设为比较小, 以保证学习的精度, 但这也意味着学习的速度比较慢. 使用平方差来描述损失函数的话, 在距离min(Total Loss)这个点比较远就会出现斜率接近于0的情况, 这将导致整个学习速度变得很慢. 

相反, 交叉熵来描述的损失函数就允许学习速度在离min(Total Loss)这个点比较远的时候, 斜率比较大, 此时learning rate可以取比较大的值. 当斜率比较小时, 意味着离min(Total Loss)这个点比较近, 此时learning rate可以取比较小的值.Learning rate的取值是一个由大至小的变化过程, 可以有效的保证学习的速度及精度.


6. 对数 (取自百度百科)

对数的定义
如果   ,即ax次方等于Na>0,且a≠1),那么数x叫做以a为底N的对数(logarithm),记作  。其中,a叫做对数的

底数

N叫做

真数

x叫做“以a为底N对数”。

1.特别地,我们称以10为底的对数叫做

常用对数

(common logarithm),并记为lg。

称以无理数e(e=2.71828...)为底的对数称为

自然对数

(natural logarithm),并记为ln。

2.零没有对数。

3.在

实数

范围内,负数无对数。在

复数

范围内,负数是有对数的。
对数函数
定义

函数   叫做

对数函数

(logarithmic function),其中x

自变量

。对数函数的定义域是  。

函数基本性质

1、过定点  ,即x=1时,y=0。

2、当  时,在  上是

减函数

;

当  时,在  上是

增函数

 

对数函数

CNN RNN DNN

CNN: 一文读懂卷积神经网络 http://www.36dsj.com/archives/24006
TO BE UPDATE...

. 卷积:

参考自知乎: https://www.zhihu.com/question/22298352

卷积, 与其理解成翻转, 不如理解成延迟后叠加。

假设小明以每年追回定期存款100元, 利息0.05每年
我们将以计算5年后本息总共有多少为例来理解卷积.

第一笔本金, 在每年的累积得到的利息如下所示:

 
每年都存100元, 5年下来, 获利明细如下:

在第5年, 总共可以取得本金加利息的金额如下:

用求和符号来简化这个公式,可以得到:
\sum_{i=0}^{5}{f(i)g(5-i)}, \mathrm{where} \ f(i)=100, g(5-i) = (1.05)^{5-i}
在上式中,f(i)为小明的存钱函数,而g(i)为存入银行的每一笔钱的复利计算函数。在这里,小明最终得到的钱就是他的存钱函数和复利计算函数的卷积。

如果把这个公式从离散推广到连续的情况, 小明从在[0,t]这段时间内持续的存钱, 他的存钱函数就为:f(\tau)\ (0\leq \tau\leq t), 那么在t这个时间点, 单笔存款按复利公式计算得到的收益为:g(t-\tau)=(1+5\%)^{t-\tau}, 则小明到时间t将得到的总钱数为:
\int_{0}^{t} f(\tau)g(t-\tau)d\tau=\int_{0}^{t} f(\tau)(1+5\%)^{t-\tau}d\tau
这也就是卷积的表达式了,上式可以记为(f\ast g)(t)
如果我们将小明的存款函数视为一个信号发生(也就是激励)的过程,而将复利函数g(t-\tau)视为一个系统对信号的响应函数(也就是响应,那么二者的卷积(f\ast g)(t)就可以看做是在t时刻对系统进行观察,得到的观察结果(也就是输出)将是过去产生的所有信号经过系统的「处理/响应」后得到的结果的叠加,这也就是卷积的物理意义了。


.梯度消失

7. 回归

简单理解:
举例来讲,假设我们知道二维平面一系列离散的点 (xi, yi)(i=1,2,...,n)
并且这些点有一个准确的函数:y=f(x)来表示, 我们还不知道这个函数。但我们可以通过统计学上的方法,不断地寻找一个函数,来无限接近于f(x)所表示的关系。这个过程,可以理解为回归。

比较学术的解释:
回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。所谓回归分析就是分析两个变量在平均意义下的函数关系表达式,回归函数。

它的实际意义就是对于两个具有相关关系但不能给出二者确切函数关系的变量,可以在平均意义下给出两者的近似关系。而分析这两个具有相关关系的变量在平均意义下的函数关系表达式,就是回归函数。

确定两种或者两种以上变量间相互依赖的定量关系的统计分析方法就是回归分析,回归分析主要分为一元回归,多元回归以及线性回归和非线性回归。
也就是说,两个具有相关关系(非确定性关系)的变量,我们通过实际数据绘制散点图,模拟它的趋势,选择合适的回归函数确定这两个变量的可能性关系。

 

 

 

 

 

第一篇博客

作为一个IT从业者,入行已八年多: 2年C语言开发,4年自动化运维,再2年辞职做外贸电商的创业,转眼在杭州上班又近一年。折腾多了, 心态已不再像刚步入职场时那般飘浮。

时间在人生的不同阶段,亦有不同的姿态。而写博客,更像是对于自己生活状态的一种记录与整理。不至于一路茫茫然的走,突然一回头,却想不起路上都经历过哪些风景。

作为技术人员,免不了要经常接触新的技术,想法。除了看书,更需要自己搭建环境,实现,验证。写博客是一种很好的积累方式,既是自我梳理, 亦是一种思路分享。