深度学习资料整理一

最近刚开始学习深度学习相关知识,今天就先从理论开始整理这几天自己所学的深度学习相关笔记。

一、学习主要参考网址:

http://www.huaxiaozhuan.com/【AI算法工程师手册】

在看手册的过程中,对于不懂的参考的网址:

深度前馈网络:异或问题
https://blog.****.net/rookiew/article/details/77602598

代价函数(损失函数)、目标函数:
https://blog.****.net/lyl771857509/article/details/79428475

https://www.cnblogs.com/Belter/p/6653773.html?utm_source=itdadao&utm_medium=referral

反向传播算法:
http://www.cnblogs.com/charlotte77/p/5629865.html

二、深度学习基础知识

深度学习:计算机从经验中学习,以层次化的概念(concept)来理解世界。

深度学习 < 特征学习 < 机器学习 < AI

深度学习资料整理一

下图给出了不同AI系统中,不同部分的关联。

深度学习资料整理一

深度学习的成功的关键有三个:

  • 训练集大小的增长。
  • 硬件和软件的发展。包括更快的 CPU、通用的GUP发展、更大内存、更快的网络连接、更好的软件基础。
  • 算法优化。**函数从sigmoid 转换到 ReLU 函数。它使得基于梯度下降的算法运行的更快。迭代网络的效率也更高了。

主要学习深度学习框架:Tensorflow,Keras

三、最简单的神经网络

神经网络基本示意图:

深度学习资料整理一

其中重要的就是**函数:使得线性变为非线性。从而也就使得神经网络具有能理解任意输入变量间的非线性关系。

常见的**函数有sigmoid、softmax、relu等,这里就不详细讲解了。

异或问题是最能体现神经网络的作用的。

什么是异或问题?

深度学习资料整理一

and:  (0,0) →  0;(0,1) →  0;(1,0) →  0;(1,1) → 1

nand:(0,0) →  1;(0,1) →  0;(1,0) →  0;(1,1) → 0

or:     (0,0) →  0;(0,1) →  1;(1,0) →  1;(1,1) → 1

xor:   (0,0) →  0;(0,1) →  1;(1,0) →  1;(1,1) → 0

其中and,nand,or都可以用线性的方法将其分类开来,即y = wx+b的形式将结果分为正负,正为1,负为0。但是xor却用线性的方法区分不开了。

示例:

深度学习资料整理一                 深度学习资料整理一                    深度学习资料整理一

          x1 and x2                                           x1 nand x2                                                  x1 or x2

                                           深度学习资料整理一

                                                                             x1 xor x2

具体代码参见我的github:https://github.com/ly987/deep-learning/tree/master/xor_problem

四、代价函数与目标函数

关于代价函数:

线性回归中,最常用的是均方误差,具体形式为:

深度学习资料整理一

逻辑回归中,最常用的是代价函数是交叉熵,具体形式为:

深度学习资料整理一

学习过神经网络后,发现逻辑回归其实是神经网络的一种特例(没有隐藏层的神经网络)。因此神经网络中的代价函数与逻辑回归中的代价函数非常相似,具体形式为:

深度学习资料整理一

大多数神经网络采用最大似然准则,令代价函数为负的对数似然函数

至于为什么神经网络会采用对数来作为代价函数,我是在后边学习唐宇迪老师讲的深度学习入门视频课程中弄懂的。主要原因还是与**函数有关。就拿softmax**函数来说,它对输出的每个类别i的得分值进行处理,得到每个类别的概率,先使得得分值大的通过指数扩大很多倍,得分值为负的呢就变成很小的数;再使用归一化进行所有类别的值相加为1。这样处理后,再对本来正确分类的那个类别概率值进行更改,使得其越接近1代价越小,而log函数正好符合这一条件。

关于目标函数:

在迭代更新过程中,并不是代价越小越好,因为可能会导致过拟合。

所以这里会添加一个正则项来对w进行惩罚。

所以我们最终的优化函数是:

深度学习资料整理一

什么是过拟合?

我看到有两个解释:

1. 就比如,在更新权重w时,存在两组权重参数使得最后的代价一样,如w1(1,0,0,0)和w2(0.25,0.25,0.25,0.25),我们该选择哪一组权重参数呢?显然如果选择w1这组权重参数的话,就很容易造成过拟合,也就是在训练的这个样本计算出来的代价很小,但是如果换给测试样本,可能会使得代价变得很大,因为w1的意思就是第一个特征很重要,后面两个特征一点用都没有,这时我们就可以通过正则惩罚项使得神经网络选择w2这组权重。

2. 这里讲解得很直观,如下图:

深度学习资料整理一深度学习资料整理一

在神经网络层越多的时候,样本的数据的代价就越小,但是也出现一个问题--过拟合,也就是如果出现一个错误的样本数据,它会很影响整个网络的模型,有时我们不需要它分得太过于正确了,这样的话,就太局限性了,界限太过于分明了。

神经网络中过拟合的一般解决办法

1. 添加正则化项:增大惩罚项,使得泛化能力好。

2. 全连接操作改为drop-out,即每层只选择某些神经元进行处理。

五、反向传播算法

反向传播:允许来自代价函数的信息通过网络反向流动,以便计算梯度。

关于反向传播,这个博客网址里有一个实例讲解,很清楚的讲了什么时反向传播,以及怎么计算等。这里就不详细讲解了。

http://www.cnblogs.com/charlotte77/p/5629865.html