• 台湾大学李宏毅老师主讲的Machine Learning and having it deep and structured(2015)

    前言

    作为深度学习小白一枚,暑假期间听了台湾大学李宏毅老师主讲的Machine Learning and having it deep and structured(2015),由于2017年的最新课程似乎是给有一定DNN和RNN基础的同学准备的,所以零基础的同学可以安心地先用2015年的课入个门。

    总体来说这门课非常好,有一点点机器学习的概念即可无压力开始学习,在这里贴一个知乎上的评价。知乎:深度学习如何入门?

    课程主页上的安排如下:

    课程主页

    总结一下课程上的教学内容:

    • 前期主讲深度学习的基本框架、模型,包括DNN、RNN/LSTM等,期间还穿插theano的模型实现(当然现在比较流行的是TensorFlow了)。

    • 中期主讲结构化学习的基本框架和数学推导,包括结构化SVM、概率图模型、马尔科夫网络等。本人对这一段不怎么感兴趣,所以跳着看的:)

    • 后期主讲深度学习在NLP和图像上的各种延伸应用,以及深度强化学习、无监督学习的基本方法,还有当时的新模型如Attention Model等。

    前期和后期与Deep Learning高度相关,所以和我一样想入门的同学要好好研究一番。

    推荐的学习方法:

    • 打印PDF,边听课边做笔记。
    • 善用视频页面右侧的选项卡,没听清的内容可以重复播放;chrome用户可以安装扩展程序Video Speed Controller,遇到速度不合心意的视频,可以减速或加速播放。

    个人笔记目录

    以下是个人整理的上课笔记,正在持续更新中……

    展开全文
  • 1、Keras在这里我们推荐使用keras进行深度学习编程,比起tensorflow来说更容易学习,操作简单,2、手写识别实例这里手写识别的数据集来自于minst,一个非常常用的数据集,从keras里可以直接导入第一步,定义方程,...
    1、Keras

    在这里我们推荐使用keras进行深度学习编程,比起tensorflow来说更容易学习,操作简单,


    2、手写识别实例

    这里手写识别的数据集来自于minst,一个非常常用的数据集,从keras里可以直接导入


    第一步,定义方程,根据我们的输入、输出和神经网络层数来进行定义

    在这里我们定义了两层,所以需要model.add两次,并且第一层需要定义input,之后都不需要定义input,因为上一层的输出就可以作为下一层的输入;且直接使用sigmoid方法

    通过代码可以看出我们只需要定义使用的方法以及输入输出的维度即可,使用非常简单


    第二步计算loss,即计算标记和方程输出之间的差距


    第三步选择最优方程

    四个函数:training data、labels、batch_size和epoch


    将输入图片和标记转换成numpy array格式


    batch:将输入随机分成多个mini-batch中,记住一定要随机,然后每次epoch计算全部的mini-batch并更新全部参数,

    即一次epoch计算全部mini-batch,更新mini-batch个数的参数


    所以这里的epoch指的是更新全部batch的次数,


    不同的batch size运行速度不同,并不是说一定的examples时间一定,所以设置batch是有必要的,即我们使用了GPU平行运算,


    x1和x2理论上运行量一样多,但是使用batch将x1和x2一起计算时可以GPU平行计算,使得上面的运算是下面的运算的两倍




    展开全文
  • 台大李宏毅深度学习经典ppt 深度学习入门经典教程,非常适合初学者
  • 深度学习历史深度学习经典步骤神经网络的符合标记含义Wij 代表的是从神经元j到神经元i,这样写的目的是便于表达,否则最后的表达式子就是Wij的转置,细节见下面。每个神经元的偏执值组成一个向量b单个神经元的...

    深度学习历史


    这里写图片描述


    深度学习经典步骤


    这里写图片描述

    这里写图片描述

    这里写图片描述

    神经网络的符合标记含义

    这里写图片描述

    这里写图片描述

    Wij 代表的是从神经元j到神经元i,这样写的目的是便于表达,否则最后的表达式子就是Wij的转置,细节见下面。

    这里写图片描述

    每个神经元的偏执值组成一个向量b

    这里写图片描述

    单个神经元的输出结果

    这里写图片描述

    这里写图片描述
    这里写图片描述

    所有神经元输出的结果

    这里写图片描述

    这里写图片描述


    深度学习示例数字识别


    这里写图片描述

    这里写图片描述

    这里写图片描述

    将图片reshape到一列(按行reshape或者按列reshape均可),类别可用0ne-hot来标记。


    深度学习损失函数


    这里写图片描述

    这里写图片描述

    这里写图片描述

    批量算损失,梯度下降法去更新参数,以便找到最优的目标函数。


    深度学习梯度下降法


    这里写图片描述

    这里写图片描述


    参考文献


    http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html

    展开全文
  • 《神经网络与深度学习》是深度学习的经典入门之作,里面包含了原理和手写识别等经典实战代码;李宏毅老师对深度学习的讲解深入浅出。是一份不错的资源。
  • 前言: ...Anyway,这篇文章十分适合机器学习初学者迅速了解深度学习,了解清楚什么是深度学习,如何做及现在最火的卷积神经网络。 教材链接:李宏毅 Let us rock! 1.什么是机器学习 机器...

    前言:

      深度学习话题十分火热,网上的资料也非常多,这的确很头疼,太容易迷失。个人认为寻找大牛的授课ppt作为入门方式就可以,跟随大牛的脚步先画出一条直线,再补充骨肉。Anyway,这篇文章十分适合机器学习初学者迅速了解深度学习,了解清楚什么是深度学习,如何做及现在最火的卷积神经网络。

     

    教材链接:李宏毅

     

    Let us rock!


     1.什么是机器学习

    机器学习就是寻找一个函数。函数的输入是现实世界的信息,输出是一个抽象结果。

      插入个人理解,可以跳过:每个函数的定义域、值域就确定了一个空间(猫 or 狗)。空间中的点都是同一个类别,不同的点表示他们的表现形式不同(黑猫和白猫),即他们的相同(处于同一空间),权值不同。不同点之间可以通过线性变化相互得到。 试想一下:每个类别都是一个小空间,每个小空间都分布在大空间的不同位置,他们之间相互独立,每个小空间有自己的基。

      Anyway,只要记住一句:机器学习非常简单,就是寻找一个函数而已。如何寻找这个函数呢?  这个是选择题。只要从备胎函数中选择一个就好了。如下图,我们有一个函数集合,而我们现在想要的函数是:给这个函数一个猫的图片,得到一个函数输出:“cat”。我们用每个函数试一下,发现f1函数可以得到我们想要的,就选这个函数了。

    我们需要再考虑点细节。

    这些备胎函数从何而来?
    为什么f1函数是好的?

    备胎函数稍后解释,但是一个函数是好的比较容易想明白,就是这个函数的输出需要是合理的,简单来说给函数一个猫咪图像,函数结果就应该告诉我们这个是猫咪。我们可以看到f1函数能够正确识别出各种图片,所以是一个好的函数。而f2这种不负责任的态度,也真的只能当个备胎了。而具体这个函数的好坏是训练数据通过监督学习得到的

    所以,机器学习的具体过程也就分为3步,简单的就像把大象放冰箱里分几步一样。这3个过程就叫做训练。通过训练我们找到了最好的函数,就可以使用这个函数判断世间所有的猫咪了。

    1.选择一系列备胎函数。
    
    2.定义函数的评判标准。
    
    3.选择最好的函数。


    上回书说到,机器学习分3步走。来看看第一步:定义一大堆备胎函数

    先上结论:人工神经网络可以拟合任何函数,神经网络由神经元Neuron构成。Amazing,我们有一个神经网络可以表示任何备胎函数,也就是这一个东西就够了!!
    更加神的是,神经元的结构非常简单的结构(如下)。可以认为两个向量的内积,累加和,权值平均等各种说法。注意方程后面有个偏移量b。关于Neuron的理解请看:这里

    Neuron 这个结构中的主要部分为:输入的加权平均(带偏置)的结果Z;对Z进行转换(到0~1之间,为什么要这么做?)。
    
    答:这个neuron的值域范围太大,大到你也不知道他的边界在哪里。所以,大牛就找来了一个函数sigma将他的值域转换到了0到1之间。Amazing!这个函数太厉害了。函数是一一对应的关系,
    可以将delta z的值推回到z。

    同时,这个函数
    sigma的导数很简单。

     

    同时,这个函数的导数很简单。好处看这里。

     有了很多很多神经元(neuron),我们就可以构建神经网络了。神经网络可以拟合任何函数,Amazing!具体原因请看:这里。 

    以下为全链接神经网络示意图:

    一个神经网络结构确定了一系列备胎函数,其参数变化就是指备胎函数的变化,例如上下两例子:函数是指输入各为向量,输出也各为向量。

    深度学习中的深度,就是指多层神经网络中的隐层非常深,非常深,非常深.输入层表示现实中的世界信息。

    到此总结一下:
    
    1.为了寻找一系列备胎函数,我们找到了人工神经网络,这个复杂的网络可以拟合任何函数!!!
    
    2.神经元是构成这个网络的基本结构。
    
    3.网络还有另外两个结构:输入层(现实世界的信息)和输出层(我们需要的输出,包含:推断和决策。)
    
    4.中间层叫做隐层:隐层就是由神经元构成的层,包含权值,偏置,激活函数。

    5.这个网络中的未知数,就是我们需要得到的信息,通过训练得到。

     

    输出层为了达到“识别”的目的,需要定义一个稍微特殊的函数,常用的就是Softmax函数。就是通过Softmax函数给每种判断一个概率。关于Softmax函数看这里

    Softmax函数就是指每种判断一个概率,并且保证所有概率的和为1. 对激活函数进行标准化过程即可。

    举个例子:通过机器学习识别手写字体。输入为含有手写字体的图片,我们可以看到输出中为2的概率最大。

    那么问题来了,这个函数是如何得到的,即神经网络中的权值系数是如何得到的?我们需要知道如何选择一个好的函数。

    进入第二步之前,回答几个问题:

    总结:

    至此,我们已经定义好了第1步: 找到了一系列的备胎函数集合。实际上,万事开头难,这一步非常非常非常困难,难道至今没有证明这种神经网络的有效性和合理性(我的理解,不对请指正).

    但是,定性地看,这种结构与人大脑的认知类似,多层结构并且向上不断抽象的认知过程,即通过每一层提取信息的一些基本特征,不断向上提出更加具体的抽象概念,有点绕口,请看下图。

     

     


    上回说到,我们解决了3步走的第1步,如何定义一大堆备胎函数。下面来看第2步:什么是好的函数。

     

    前面已经进行简单说明,好的函数就是可以得到正确预期结果的函数。起码,在训练数据集上,我们的结果是与预期最接近的。例如我们输入1,就应该得到该图片是1的概率最大。


    不知不觉到了第3步:如何选取最好的函数

    寻找最好的函数,就是为神经网络选取一组最好的系数theta使得损失函数最小。但,显然我们不能通过遍历的方式进行寻找系数。例如含有1000个neuron的两层神经网络结构中,第一层的输出为1000个值,对应第二层的每个neuron就有1000个weights,所以需要的参数就是1000*1000+1000(偏置)。

    梯度下降。把它列出来,是因为这个方法太过神奇,但是大家已经清楚,直接列出ppt。

    每次沿着负梯度方向移动:

     

    总结:

    此致,为了求得最小的损失函数,我们找到了梯度下降算法。但是,网络那么深,结构那么复杂,如何计算梯度呢? 答案是反向传播算法反向传播算法不是特别的算法,就是为了更有效地计算梯度,必须跟正向传播算法结合使用。

    为了得到神经网络的全部系数,还需要了解反向传播算法,请看这里(补充神经网络的训练过程)。

    深度学习(很多很多层的人工神经网络)中有两个子问题:网络需要多深? 神经元还可以是什么样子?

    深度学习领域的人的研究工作也就是集中在这两个部分啦。第一个问题是:越深越好么? 参数越多当然越好了,但这里的前提是“对参数的控制性”不会下降。简单来说,参数越少,
    我们对参数的控制越简单,所以得到的参数往往较好;而参数较多的情况下,模型比较复杂,我们得到的参数较差,此时得到的结果较差。DL中的参数是通过学习得到的,如果梯度传播有效性得到
    保证,那么应该是网络越深越好。想想一下,如果网络的复杂程度达到大脑级别,那就是真正的AI了。 第二个问题也是研究方向之一,例如RNN,LSTM这种不同的神经元模型。

    网络是越深越好么?

    越深越好么? 参数越多当然越好了,但这里的前提是“对参数的控制性”不会下降。简单来说,参数越少,我们对参数的控制越简单,所以得到的参数往往较好;而参数较多的情况下,模型比较复杂,我们得到的参数较差,此时得到的结果较差。DL中的参数是通过学习得到的,如果梯度传播有效性得到保证,那么应该是网络越深越好。想想一下,如果网络的复杂程度达到大脑级别,那就是真正的AI了。

    但是,很早就有证明,如果有足够的神经元,一个隐层就可以拟合任何连续函数,为什么不是一个含有多个神经元的胖网络,而是多层的瘦高网络

    通过实验得到瘦高的网络好啊~~

    从分析的角度看,同样的训练样本,多层的神经网络使得每一层都训练的更加充分(训练数据更多)。Amazing!例如,下面例子中,个别类别的训练数据中只有一个样本。

    但是,多层的结构中,样本被反复利用,训练更充分。

    深度就是不断的模块化。

    从最基本的模块开始,每层都是一个模块。越往上得到的结果越具体。

     


     训练深度神经网络(Tips for Training DNN

     

    1. 首先,关注训练集和测试集的结果,根据反馈结果进行调整。

    结果不好,不一定是过拟合,也可能一开始就没训练好。

    具体排查过程如下:

     

    不同的损失函数,得到的结果差别很大。

    当使用softmax的时候,选择cross entropy作为损失函数。

    使用mini-batch

    只是每次使用一个小的训练集,但是所有训练集都要经过训练,总的损失函数并不减少。mini-batch为100,时代为20.

     mini-batch的缺点是不稳定。这个地方没看懂。

    mini-batch执行快,同样执行了全部样本,mini-batch得到的结果好得多。

    其他的激活函数:

    上回书说到,越深越好,但实际情况是,深度太深,参数控制不好,结果变得不好。

     

    这个原因是梯度的消散,传到后面跟随机差不多了!!!

    Relu函数,在z小于0的时候,丢弃这个神经元的输出。

    使用后,网络中很多的神经元不参与计算,网络变得更瘦。

     但是,网络的结果变得更好。

    Relu的变形

    Maxout

    Maxout是深度学习网络中的一层网络,就像池化层、卷积层一样等,我们可以把maxout 看成是网络的激活函数层。

    (1)以前MLP的方法。我们要计算第i+1层,那个神经元的激活值的时候,传统的MLP计算公式如下。其中f就是我们所谓的激活函数,比如Sigmod、Relu、Tanh等。

    (2)Maxout 的方法。如果我们设置maxout的参数k=5,maxout层就如下所示:

    相当于在每个输出神经元前面又多了一层。这一层有5个神经元,此时maxout网络的输出计算公式为:

    所以这就是为什么采用maxout的时候,参数个数成k倍增加的原因。本来我们只需要一组参数就够了,采用maxout后,就需要有k组参数。

    下图就是将原来的Relu换成了Maxout结构,其中含有两个元素,即需要2组参数。

    maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白)。

    每个elements(piece)都是一个线性函数,由于取了最大,所以变成了线性分段函数。

    总结:

    激活函数的不同对网络影响巨大,例如Relu可以使得梯度消失问题得到缓解,Maxout有很好的拟合能力。

    自适应的学习速率:

    太大,太小都不行:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


     

    卷积神经网络

      卷积神经网络是深度学习网络的变形,是目前处理图像和声音最出色的算法。那么为什么不直接使用深度学习网络呢? 答案是:不好用。因为网络的参数太多,假设只有100*100像素的RGB图像,一个隐层只有1000个神经元。那么网络的参数达到:100*100*3*1000=3*10000000的数量级。

    那么第二个问题来了,为什么CNN适合图像的处理。这就要说到图像本身的性质:

    1. 图像的特征具有局部性。所以每个神经元只需要链接图像的一部分。
    2. 图像进行下采样之后,图像中目标的变化不大。

    鸟嘴作为鸟的局部特征,只需要部分区域就可以进行表达,另外,不同图像中的鸟嘴虽然出现在不同的位置,但是他们可以使用同样的参数(卷积核或权值系数)对该特征进行表达。

     另外,图像经过下采样之后,图像中的目标和基本性质保持不变。所以,将大图像进行下采样可以减少网络中的参数。

    什么时CNN?仍然是三步走:

    简单来讲,就是对传统的深度神经网络的输入层进行优化。卷积和池化交替进行,目的就是保留图像的性质并减少网络参数的个数。

    什么是卷积操作?

    就是传统的图像卷积,但是有两个点需要注意:卷积核是训练得到的;步长(stride)不同,得到的卷积结果不同。

    出现在不同位置的同一图像特征,也可以被有效的检测到。

    得到的卷积结果叫做Feature map

     

    彩色图像是三个图层同时进行处理,含有3个feature map。

     CNN的另外一个操作:池化

    池化就是利用图像下采样后性质保持不变的特性对图像进行下采样,只不过是将卷积结果作为图像进行下采样。深入思考:图像变小,但是性质:边缘,嘴角等依然存在,
    而他们的性质已经保存在feature map中,池化相当于选择邻域内最明显的性质作为特征。

    将最终的结果作为新的图像,同时排列成一列,输入给神经网络下一层。

    将经过多次卷积和池化后的图像进行向量排列,并且作为人工神经网络的输入。

    整个CNN的过程如下:

    1.卷积和只对图像局部进行操作,每次计算都是卷积核大小的链接个数,而不是全连接,极大地减少了参数的个数。
    
    2.卷积核相当于神经元的权值系数,所以每一种卷积核(鸟嘴)的权值系数相同,所以神经网络的参数与图像的特征数量有关系,大大减少了神经网络的参数个数。

     

    共享权值,进一步减少系数

    所以在CNN中,参数个数不再是输入与下一层神经元的乘积。而是仅仅表示卷积核的个数。Amazing!!!。

    CNN第二步和第三步:与传统的神经网络并无差别

     总结

     1. 深度神经网络每一层都是图像的特征,从下向上不断抽象,下层是最基本、最通用的表达,到最上面的具体分类。从空间的角度理解就是,每一层的神经元都是空间的基,该空间中的不同类别通过权值系数进行区别。

    从下向上,空间的维度不断缩小和具体。 训练得到的最好的网络就是:基是正交的,完备的。有时为了效率,可以是稀疏的。从信号处理的角度理解就是,每个神经元的下层的权值都表示一个滤波器,即某个特征的模板,而下层神经元与对应权值系数的内积表示了下层神经元与模板的相似程度,就得到属于不同特征的可能性。就是下层的神经元作为上层的输入,表示将一个向量输入一个系统,就可以得到向量在这个系统所代表的空间的基上的投影,向量与哪个基(特征)更接近。

     


    进入RNN

    Slot Filling。 槽填充则可以看做是序列标注问题,即对于给定的句子中的每个词分别打上相应的标签。

    输入是一个向量(每个词用向量表示),输出也是一个向量(标签也用向量表示)。

    如何用向量表示词? 1-of-N encoding的含义? 猜测是N=所有词的和,同时表示编码后的向量长度,每个词所在的位置为1,其他的位置为0.

    超越上述编码还有啥编码? 在词库中不存在的词叫做other。另外可以使用哈希表进行表示,可以表示的词汇量更大,但是其向量的长度也更大。例如下面长度为26^3,根据规则每个词的字母由三个连续的字母按顺序确定下来。所以,单词的的长度就是向量中1的个数。

     最后,输入为向量(一个单词),输出为这个单词属于各个槽的概率

    问题是: 此时的Taibei,我们无法判断是目的地还是出发地(出现了歧义)?所以,需要根据句子中其他部分的信息,对槽进行更加具体的判断:给神经网络增加记忆功能。

    循环神经网络

    隐层的输出进行保存,作为后续隐层的输入循环网络与普通的神经网络区别是:这种方法是相当于把上文的信息也利用起来,网络的训练过程中利用了更多的信息。

    之前的算法是:那个词的概率大就利用哪个,但是循环网络是可以综合考虑上下文信息的共同概率,这样理解对么?

    具体是t时刻的隐层输出作为t+1时刻的隐层的另一个输入!!! 同一个神经网络被使用多次,每次赋予时间含义。横向展开只是为了好理解。

    通过预料的训练,到达与出发输出的概率不一样,所以同一个Taipei表示不同的含义。(到达或出发)

    这个双向是什么意思?把上下文倒序输入到网络中进行训练!!!

    训练过程:

      以股票预测为例,我们取出某股的一个月涨跌记录,并且以10天为一个时间段,1天为滑动步伐。输出为第11天的股票预测结果。损失函数就是预测值与真实值的MSE.

    所以,第一次输入为1-10天的数据,第二次输入为2-11天的数据,...然后一直输入21-30的数据,经过多次训练之后,我们就能得到较好的模型了。

      同样,我们可以一每一天的数据作为训练数据。第一次输入第一天的,第二次输入第二天的,...然后输入第10天的。模型的每次输入都是第二天的预测结果,而且与之前的输入息息相关。这是个动态的,例如只输入一天的涨跌,就是根据第一天的涨跌预测第二天的涨跌。输入第一天的和第二天的涨跌作为训练,输出就是根据第一天和第二天的涨跌预测第三天的涨跌,以此类推...,这个就是NLP中的slot filling

      所以,RNN网络的层数理论上跟需要记忆前序信息的长短有关系。RNN中因为记忆太长,梯度消失,所以出现了LSTM。


    理解长短期记忆网络:

    Neron的结构不太一样,4个输入,一个输出。

    如下图,f,h,g都是激活函数,f一般是sigmoid函数。c为上一时刻的细胞值。a是neuron的输出。

    如下两个例子:

     c表示cell,即细胞的值,下图为含有多个LSTM block结构的神经网络,ct-1存储了上一时刻的结果,当前时刻为t,输入为xt

     

    例如:

    x是输入向量(单词),a是LSTM block的输出,整个学习目标如下:

    剩下的就是选择最好的函数了,遗憾的是梯度下降也不太好用了。

    导致这个产生的原因是w有个连乘的关系。

    更多的例子:

    怎么加结束标志的?

     

     


    强化学习:

    通过利用一个场景的反馈,使得机器学习是否好或者坏。

     

    代理通过行动,寻找最大的回报期望。

     

    转载于:https://www.cnblogs.com/Matrix420/p/6285383.html

    展开全文
  • 多少啊的

    摘要

    	最近在学习台大李宏毅老师的深度学习课程,感觉受到了醍醐灌顶式的学习。在这里记录一下学习笔记,一方面希望和大家多交流学习,一方面如果有不足的地方希望大家能指正。我将从三个最basic的网络连接:全联接层、卷积神经网络到循环神经网络三个方面结合李老师的PPT和自己的理解向大家展示。
    

    目录

    (1)Fully connected layer(全联接层)
    (2)Convolutional/pooling layer(卷积/池化层)
    (3)Recurrent structure(循环神经网络结构)

    1.Fully connected layer

    (1) 全连接网络基本结构

    顾名思义,全联接层就是两个layer之间的神经元都是俩俩相连的。例如,现在有两层神经网络,如下图1所示
    图1 Fully connected layer
    两层神经网络分别为Layer l-1,Layer l。他们分别有N个结点,只是在这里为了表示区分,我们分别用NlN_lNl1N_{l-1}来表示。每一层的 每一个结点的输出用ailayera_i^{layer}表示,例如,aila_i^l,表示layer l层第i 个结点的输出。每一层的输出用向量alayera^{layer}表示,例如layer l的输出可以表示为ala^{l}
    以上就是全联接层的基础结构,那么全联接层两个神经层之间的神经元是如何两两相连的呢?——通过weight和bias来形成连接:具体表现如下图2所示:图2  fully connected layer
    layer l-1 中每一个神经元都通过不同的权值和下一层的所有神经元相连。神经中间的连线可以理解为乘上了权值weight,这里需要说明的是WijlW_{ij}^l:下标ij代表weigth的方向由神经元j指向i(仅仅是为了方便后文推导公示),也就是前一个神经元结点指向后一个神经元结点。上标l:代表layer l-1指向layer l 。举个例子:layer l-1中1号神经元和layer l中各个神经元相连的weight可以表示为:(W11lW_{11}^lW21lW_{21}^l W31lW_{31}^lWi1lW_{i1}^l…),有NlN_l个。那么layer l-1中每个神经元和下一层的连接就可以表示为上图3所示:layer l-1中每个神经元和下一层的连接
    WlW^l的每一列,代表layer l-1中每一个结点和layer l中的连接,总共有Nl1N_{l-1}列,因为layer l-1有Nl1N_{l-1}个结点。每一列的长度为NlN_l个,因为layer l有NlN_l个结点。
    biase是在上一层结点乘以权重之后加上的一个偏置值。如下图4所示:bias
    现在我们清楚了weight和biase之后,可以来开始运算了。我们设zilz_i^l为layer l输入到第i个结点之前的值,也就是上一层的结点经过weight和biase运算之后的值。例如,layer l 中输入到第一个结点的z1lz_1^l值为:
    z1l=w11la1l1+w12la2l1+...+b1lz_1^l=w_{11}^la_1^{l-1}+w_{12}^la_2^{l-1}+...+b_1^l
    依次类推:
    z2l=w21la1l1+w22la2l1+...+b2lz_2^l=w_{21}^la_1^{l-1}+w_{22}^la_2^{l-1}+...+b_2^l
    zil=wi1la1l1+wi2la2l1+...+bilz_i^l=w_{i1}^la_1^{l-1}+w_{i2}^la_2^{l-1}+...+b_i^l
    这就是上一层结点和下一层结点的连接方式,为了总结出公示,我们做一个矩阵运算,如图5所示:
    relations between layer outputs
    得到z、a、b、w的关系:
    zl=Wlal1+blz^l=W^la^{l-1}+b^l进一步,得到下一层输出和上一层输出的关系:
    al=α(zl)a^l=\alpha(z^l)
    等价带换为向表示:
    al=α(Wlal1+bl)a^l=\alpha(W^la^{l-1}+b^l)
    其中α\alpha为激活函数。

    (2)总结:

    两个全联接层之间的神经元是通过乘以weight和加上biase来实现两两连接的,参数数量较多,例如,如果输入图像是1001003,中间隐层神经元1000个,那么其中的参数就是:100 *100 *3 *1000 + 1000个,这样的参数是本来神经元的很多倍,如果神经元数目和隐层数量较多,参数数量将指数增加。为了减少参数数量,引出CNN。

    2.Convolutional/pooling layer

    (1)概述:

    那么卷积神经网络(convolutional Neural network)是如何实现减少参数的呢——通过局部感受野 和权值共享以及pooling来减少网络需要训 练的参数个数,下文做具体阐述。
    我们先来看一个CNN的整体结构,其实就是fully connected的简化版,如图所示:
    the whole cnn
    输入一张图片,经过多个convolution和pooling的循环叠加,最后记过全联接层输出判断的结果。接下来我们对convolution和pooling做详细说明。

    (2)convolution特性

    卷积层有两个特征,这两个特性决定CNN适合处理图像相关的问题,也是用于 减少参数的关键技术。
    特性一(局部感受野):some paterns are much smaller than the whole image.
    why cnn for image
    a neuron does not have to see the whole image to discover the pattern:比如说现在有一个neuron来判断是否有鸟嘴,只需要看到鸟嘴,就可以去判断出图片中是否有鸟的存在。那么只需要将image中的一部分像素丢给neuron, 只需要将图片中一部分丢给neuronn,就可以做需要做的事情。
    特性二(权值共享):The same patterns appear in different regions
    why cnn for image
    就是同样是鸟嘴,如果用一个neuron去诊断左上有没有鸟嘴,一个neuron去诊断中间有没有鸟嘴,就太冗杂了,其实只需要用同一个neuron同一组参数可以诊断处出来,这样就可以减少layer中neuron的个数。这么说有点抽象,举一个例子:
    在这里插入图片描述
    现在有一个33的filter,也就是过滤器,其对角线都为1,其余地方为-1。有一个66的image,我们开始做卷积,也就是用filter中的元素和image中的像素点对应位置相乘相加,就是一个内积(inner products)的操作。设置步长stride= 1,也就是做一次内积之后移动步长为1的距离在做内积操作。就会得到右边4*4的矩阵。
    需要注意的是:因为filter的特性,如果image中有一部分区域对角线全为1,那么内积出来的值就会很大。比如image左上和左下区域,内积之后的值都为3。也就是说,在同一个图片的不同区域,用同一个filter同一组参数就检测出来了。

    (3)convolution实现过程

    卷积过程也就是特征提取的过程。卷积的特征提取由卷积核(Convolution Kernel),也叫过滤器filter来实现,filter是一个矩阵,它以步长为任意长度的方式在图像上移动,并且做点乘加和运算,就是先做点乘,之后再求和。下图是3x3的卷积核(黄色部分)在5x5的图像上做卷积的过程(步长为1):在这里插入图片描述
    需要注意的是:filter的个数以及其大小,都是我们自己决定的,但是并不是乱取的,举一个例子,要找到图片中某个pattern,其大小是33,那么这里用的filter就必须大于33。与之相反的是,filter里面的值是学出来的,也就是weight的值,是训练出来的。
    feature map和原图像的区别:
    1、经过卷积后得到的convolved feature 中每一个位置用一个或多个value来描述原图像的对应位置。比如上图中,feature map中左上角的一个value值4描述了原图像左上角33的部分。
    2、如果filter是多个,就会得到较深的feature map,这样就会出现多个value值来描述原图像对应的位置。如下图所示:在这里插入环境片描述
    此时filter为2,就会得到两张特征图,每一个位置就会有两个value值来描述原图像中对应的位置。
    对彩色图片卷积:
    彩色图片拥有三个channel,分别是R、G、B,也就意味着卷积核也需要和原图保持同样的通道数,这时候filter的形状像一个立方体,同样一个filter就会得到三张feature map,如下图所示:
    在这里插入图片描述
    卷积核越多,提取图片的特征就越深,可以更好的做分类和识别。
    convolution vs fully connected:
    卷积网络是全连接网络的简化版,如下图所示在这里插入图片描述
    我们把image的每一个像素排成一个向量的形式(一列),全连接层的隐层每一个神经元都连接了image中所有的像素。
    然而,在convolution中,隐层中的每一个神经元只连接image中的部分神经元,而且连接的权值便是filter中的值。如下图所示:在这里插入图片描述
    如果采用3
    3的filter,那么每一个神经元连接的image像素点就为9,也就是9个权重参数,并不想全连接层中那样,需要连接整个image。
    ### pooling
    池化也叫做下采样,它是把卷积过后提取之后的特征看做一个矩阵,并在这个矩阵上划分出几个不重合的区域,然后在每个区域上计算该区域内特征的均值或最大值,然后用这些均值或最大值参与后续的训练。
    这里介绍两种主要使用的池化方式:1,找出区域内的最大值。2.找每个区域的平均值。如下图所示:
    在这里插入图片描述
    max-pooling就是找出区域内的最大值,作为池化的输出。这个区域大小可以自己设定。与之相对应的mean-pooling就是找出区域内的均值。

    (3)总结:

    卷积层后面通常就会接一个池化层,池化层的作用就是将特征图缩小,目的也是为了减少计算量。通常一个CNN结构都是卷积和池化的不断迭代,然而经过每一次卷积池化操作后,都可以看成是新的image,然后再由下一层的卷积池化来提取特征,这样不断提取特征,就会得到更深的更好的特征,最后将得到的特征排列成向量做全连接,如下图所示:在这里插入图片描述

    展开全文
  • 李宏毅深度学习(一):深度学习模型的基本结构 转自简书的一位大神博主:文哥的学习日记 原系列博客地址:https://www.jianshu.com/nb/13240984 视频地址:...
  • 很直观 入门很好! Lecture I: Introduction of Deep Learning Lecture II: Tips for Training Deep Neural Network Lecture III: Variants of Neural Network Lecture IV: Next Wave
  • 深度学习-李宏毅GAN学习一目的GAN的理论原理极大似然估计生成器G判别器D具体求法 目的 通过学习和理解李宏毅的GAN课程,对GAN有更加深入的理解,希望能结合李宏毅老师的课件和自己的理解把GAN的理论基础搞明白,这样...
  • 先引用他人关于李宏毅教授关于深度学习导论的PPT,应该非常容易入门。 《1天搞懂深度学习》,300多页的ppt,台湾李宏毅教授写的,非常棒。不夸张地说,是我看过最系统,也最通俗易懂的,关于深度学习的文章。“ ...
  • 背景介绍 DL很火,老师大概说了一下它能用的场景,给出了Jeff Dean(2009年当选美国工程院...深度学习的发展史Up and downs of deep learning 里面有些生词: 受限玻尔兹曼机,英文名字是Restricted Boltzma...
  • 李宏毅深度强化学习- Q-LearningIntroduction of Q-LearningBasic ideasQ-Learning:Tips of Q-LearningQ-Learning for Continuous Actions 李宏毅深度强化学习课程 https://www.bilibili.com/video/av24724071 ...
  • 台大李宏毅教授深度学习公开课一天搞懂深度学习全部课件,这里是pdf版,还有ppt版,也会发布。这是公认的入门深度学习最好的学习资料之一。同时也会上传深度学习李宏毅全部的视频资料。
  • 前一期给大家分享了李宏毅老师17年深度学习课程的前半部分,今天继续与大家分享李老师的在2017年初陆续发放出来的关于深度学习/机器学习的视频课程后半部分。 整套视频的目录: 整套教程的视频及配套PPT...
  • 李宏毅教授2017年的演讲介绍深度学习理论,适合深度学习入门者。
  • 转载自:机器学习算法那些事ID:Charlotte77公众号:Charlotte数据挖掘By Charlotte77前言:李宏毅的教材,非常经典,B站有配套视频...
  • 一周后要进行深度学习考试。十几周的课程下来,基础部分掌握不是很扎实,高阶应用部分更是N头雾水。 在这种情况下,我阅读了李宏毅老师的文章。通过这篇精悍之文,可以提纲挈领地把握深度学习的主体框架,可以对...
  • 文件包括李宏毅对机器学习和深度学习入门介绍,包括线性回归、逻辑回归、神经网络等基础知识,也包括从机器学习到深度学习的一个工程,并结合图像识别,详细讲解了机器学习在攻击与防护领域中的应用。 附——作者...
  • 在上一节课的最后,我们发现logistic regression的局限是不能处理非线性数据,因此提出了特征转换。而特征转换往往不是可以一眼看出来的,所以我们先通过两个logistic regression来提取特征,再把提取的特征作为最终...
1 2 3 4 5 ... 20
收藏数 1,300
精华内容 520