文章目录
背景介绍
DL很火,老师大概说了一下它能用的场景,给出了Jeff Dean(2009年当选美国工程院院士,2018年 4月3日,出任谷歌旗下搜索与人工智能(AI)业务部门的高级副总裁。)的一张ppt。
图中显示的是DL在谷歌内部的项目数量。
深度学习的发展史Up and downs of deep learning
里面有些生词:
受限玻尔兹曼机,英文名字是Restricted Boltzmann Machine,简称RBM。
https://blog.csdn.net/u013631121/article/details/76652647
ImageNet Large Scale Visual Recognition Challenge是图像分类领域的比赛,也叫人工智能“世界杯”之称的ImageNet大规模视觉识别挑战赛。
深度学习的三板斧
和之前讲机器学习一样的套路:
但是在步骤1中的function set是指Neural Network。
第一步:定义一个function set
到这里接上一节课内容
不同的连接方式可以得到不同的网络结构,在这个神经网络里面,有一大堆的logistics regression,每个logistics regression都有它们自己的weight和bias,这些weight和bias集合起来就是这个神经网络的参数,记为:
神经元(这里是logistics regression)的连接方式
全连接前馈网络 Fully Connect Feedforward Network:最常见的神经网络连接方式
上面0.98的计算是:算z=(11+(-1)(-2)+1)=4,带入σ函数即可。同理可以算出下面的结果:
当输入变成0和0的时候:
可以看到整个网络(包含参数)就是定义了一个function(这里没有复数s),它的输入和输出是向量。
如果只给出网络结构,没有给参数,就是定义了一个function set。参数当然是要learn出来的咯,不然为什么叫机器学习。
也就是说第一板斧和机器学习一样,也是决定一个function set,而且这个function set比之前学的linear regression或者logistics regression的function set更加复杂,按老师的说法是涵盖它们的。
小结一下全连接前馈网络,并讲了神经网络里面的基本概念(输入层,隐藏层,输出层,神经元)
- 相邻两层每个neuron之间两两连接
- 输入到输出方向是从后向前的。
深度学习有几个隐藏层?
现在只要是神经网络都归类于深度学习(隐藏层只有一层也算),上面给出了近几年网络层数的变化。
坑:152层的神经网络,当然不可能使用全连接的方式,需要使用特殊的连接方式,以后会讲。
神经网络的计算方式(矩阵操作matrix operation)
神经网络的计算可以转换为矩阵的操作,把之前的例子进行转换如下图所示:
把这个问题一般化考虑:
这里和ng的深度学习课程里面符号用的差不多。
可以看到最后的输出y实际上就是矩阵的递归,写成矩阵运算的方式可以方便GPU进行加速。
神经网络的输出output layer
可以把神经网络中的隐藏层看做是对输入层的特征提取、替换等特征工程操作,得到最后输入到输出层的,输出层相当于一个分类器,对前面处理好的特征进行分类。这里用的softmax如果不记得可以看上一课笔记。
范例:手写数字识别
终于不是宝可梦拉。ppt对问题的输入和输出都讲得很清楚,就不多解释了。
数学上表达就变成:
和前面的传统机器学习不一样的是,这里我们需要决定网络的结构(有几个隐藏层,每个隐藏层有几个神经元)。
决定神经网络结构非常关键,如果网络结构不好,也就意味function set不好,如果function set没有包含好的function,那也没办法从中找到最优解!
FAQ.例如:神经网络的结构如何决定
DL并没有比机器学习简单,只不过是将原来的问题换一个角度来看,原来传统机器学习会需要花大量的时间来进行特征处理或变换,而在神经网络中则不需要对特征进行特别处理,例如在图像处理的时候一般都直接把图像的像素作为特征直接作为输入层。在神经网络中主要工作在于确定网络的结构。
究其原因,类似语音识别或图像识别问题,特征自动提取往往比较困难,不如把工作放在确定网络的结构上反而比较容易。
第二步 定义一个function的好坏(goodness of function)
损失函数的计算
最后损失函数的计算和前一次课中的multi classification的交叉熵计算过程一模一样。
输出是,目标是
最终的代价函数(cost function)目标是调整神经网络的参数,让所有输出和目标之间的交叉熵之和最小。
PS,这里的损失函数,代价函数的标记有些混乱,尤其是和ng的课程里面有些些不一样,理解就好。
第三步:选出最优函数:pick the best function
计算参数θ的方法:Gradient Descent
,这里的梯度下降和前面讲的梯度下降算法过程一样,但是这里的函数复杂一些(神经网络参数多啊)。
1.参数中包含很多个参数,先给它们一个随机初始值;
2. 接下来计算梯度(也就是每个参数对于total loss L的偏导数()),把所有的偏导(为什么老师叫偏微分-。-)集合起来就是梯度了。
3. 有了梯度后就可以更新参数,就是下图中黑色箭头部分,其中就是learning rate,更新完毕后得到新的一组参数,然后重复步骤2。
最后问题就变成如何计算复杂函数中的偏导,其实就是下一节课的内容(反向传播:backpropagation)老师非常贴心的给出一些已经实现了的库,说在做作业的时候可以直接调用。
另外还给出一个链接:反向传播讲解专题(30mins)
还没详细看这个链接的内容,大概看了一下,应该是讲得很清楚,就是不知道这个讲解和下节课的内容有什么不一样。
最后的总(da)结(keng):为什么要深度学习?
2011年的实验表明,越深(层数越多)error越小(老师原话:performance越好,这里应该不能翻译为性能),究其原因是因为,层数越多,神经网络包含的参数越多,意味着model越复杂,说涵盖的function越多(函数空间越大),bias越小,如果training data足够多,variance可以控制得比较好,因此越deep越好~!
有这么一个已证明的理论:任何连续的函数(输入输出见下图),只要有足够的隐藏层神经元,就可以用一个隐藏层来表示这个函数。
那既然一个隐藏层就可以表达函数了,为什么还要deep learning呢?且听下回分解
参考资料
最后给出一些参考资料,都来自大牛:
Yoshua Bengio(深度学习三巨头之一,18年图灵奖获得者)
花书
另外一个,这个貌似有pdf版本,有兴趣的可以自己搜一下:
Michael Nielsen的神经网络与深度学习入门教程