李宏毅机器学习笔记(7):Deep Learning

1 前言

       对于深度学习(神经网络)的应用,在目前这个时间段来说,使用对象,发展研究实在是太多了。这也可以算是这个时代非常热门的一项技术了。

       这里可以看一下,图1-1了解下深度学习的历史上的起伏。

图1-1 深度学习的历史上的起伏

       可以看到58年提出感知机后由于有人提出了感知机受限后就冷下去了,后经历了一些起伏直到06年的RBM(受限玻尔兹曼机)的提出。RBM提出使得深度学习得到了发展与突破,但是RBM其实并没有非常的有用,只是因为其难度大,人们才产生了它很有用的错觉。到了09年,大家开始用GPU去训练神经网络。

       深度学习其实很简单,和机器学习一样,有三步。

图1-2 深度学习的三步

2 神经网络概述

上一次提到了,把很多个逻辑回归模型连起来,就得到了一个神经网络,而每一个逻辑回归的模型就是一个神经元。可以改变神经元和他的连接是可以改变网络的结构的。

图2-1 神经网络

       有时候我们会把所有的节点连接起来,组成神经网络,这是一种方法,我们叫全连接前馈网络,如图2-2。可以看到,这个网络当我们在最左端输入端输入参数的时候,会在输出端得到一些结果,很容易理解,其实神经网络就是一种函数,每一个节点之间的参数都是可以通过样本进行调整。

图2-2 全连接前馈网络

       如果我们把神经网络作为我们的函数集,那么由于参数多,所以这个函数集是非常大的。

       接着看图2-3,可以明显的看出,后一层的每一个神经元都会与前一层的每一个神经元链接,这种方式叫做全神经网络。而每一层传播是单向传播,从输入层直到输出层,这叫做前馈神经网络,连起来就是全连接前馈网络。

       我们把进行输入的层叫输入层,进行输出的层叫输出层,中间的部分叫做隐藏层。

图2-3全连接前馈网络

       所谓深度学习中的深度,是指网络中有很多层的隐藏层。

3 神经网络的计算

       对于神经网络来说,可以使用矩阵的操作来进行一系列的计算的。如图3-1,我们可以使用矩阵运算对每一层进行计算,首先进行一个线性的运算之后在使用sigmoid函数进行处理,当然我们大多时候其实使用的函数不一定是sigmoid函数。

 

 

图3-1 神经网络的计算

 

       这样我们可以有很多层的神经网络,那么计算就变成了很多很多层的矩阵运算,图3-1最下面的式子,输出可以是输入的很多层的矩阵运算的叠加。这样使用矩阵运算是有好处的,这样写我们就可以使用GPU进行运算了。

       在整个神经网络中,隐藏层我们其实可以看成是在做特征转化,而输出层是在做一个多分类的问题,这些上一章都提到过。而在输出层,就可以使用softmax函数进行进一步的处理,毕竟是一个多分类的问题,如图3-2。

图3-2 输出层

4 例子

       这部分李宏毅老师讲了一个例子供我们更好的学习,做一个简单的手写数字辨析。

第一步,确定我们的函数集

       这是手写的一个数字“2”的图像,要使用深度学习让机器输出2的结果。图中有256个点,每一个像素点有0,1两种状态,所以256个点的值作为我们的输入(0或者1),得到的结果可能是0到9十个数字,那么输出应该有十个,输出结果应该是得到每个数字的概率。如果得到某个数字概率最大,那么最可能是这个数字。

 

 

 

图4-1 手写数字辨析例子

       之后提一些有趣的问题,直接看图吧。

第二步,判断模型的优劣

       在这一步,其实就是在寻找我们的损失函数,为了之后对其进行梯度下降寻找最好的模型,这些我们都烂熟于心了。

       对于样本,比如图4-2,一个手写样本1的图片输入进去,我们会得到一组输出值。我们知道这个样本的实际是1,那么我们的理想目标就是输出为1的概率是1,其他概率统统为0。这时就可以用我们模型的输出值和理想值得到交叉熵损失函数了。

图4-2 手写数字辨析例子第二步

我们有很多样本,把所有样本都可以求解其交叉熵,最终总的损失函数就是我们的所有交叉熵的求和。

那我们现在的目标就是寻找一组参数,使得这个损失函数的值达到最小。那么我们就可以使用梯度下降了。

图4-3 总的损失函数

 

第三步,寻找最好的函数

       这一部分其实就是之前提到过的梯度下降啦。

       对每一个参数进行梯度下降。

 

 

图4-4手写数字辨析例子第三步

 

       这就是深度学习,是不是感觉有点失望啊。目前现在有大量的资源框架供我们去使用,哪怕你不懂这些过程。

图4-5 资源

 

5 疑问

       有一个问题,更多的隐藏层,更深的深度是不是更好呢?

图5-1 更深的深度

       曾经有个理论是这样说的,使用只有一个隐藏层的网络,只要这个网络的神经元足够多,他可以表示出任何函数,如图5-2。那么为什么我们不使用足够宽的神经网络呢?

图5-2深度?

       这个问题之后会聊到的,最后放上一些deep learning的资源:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值