精华内容
下载资源
问答
  • 可以在Wing IDE直接运行并显示效果。还有原始代码及答案,并配有h5数据文件。
  • 我的CSDN博客地址:红色石头的专栏 我的知乎主页:红色石头 我的微博:RedstoneWill的微博 我的GitHub:RedstoneWill的GitHub ...首先介绍神经网络的基本结构,包括输入层,隐藏层和输出...

    红色石头的个人网站:redstonewill.com

    上节课我们主要介绍了浅层神经网络。首先介绍神经网络的基本结构,包括输入层,隐藏层和输出层。然后以简单的2 layer NN为例,详细推导了其正向传播过程和反向传播过程,使用梯度下降的方法优化神经网络参数。同时,我们还介绍了不同的激活函数,比较各自优缺点,讨论了激活函数必须是非线性的原因。最后介绍了神经网络参数随机初始化的必要性,特别是权重W,不同神经元的W不能初始化为同一零值。本节课是对上节课的延伸和扩展,讨论更深层的神经网络。

    1. Deep L-layer neural network

    深层神经网络其实就是包含更多的隐藏层神经网络。如下图所示,分别列举了逻辑回归、1个隐藏层的神经网络、2个隐藏层的神经网络和5个隐藏层的神经网络它们的模型结构。

    这里写图片描述

    命名规则上,一般只参考隐藏层个数和输出层。例如,上图中的逻辑回归又叫1 layer NN,1个隐藏层的神经网络叫做2 layer NN,2个隐藏层的神经网络叫做3 layer NN,以此类推。如果是L-layer NN,则包含了L-1个隐藏层,最后的L层是输出层。

    下面以一个4层神经网络为例来介绍关于神经网络的一些标记写法。如下图所示,首先,总层数用L表示,L=4。输入层是第0层,输出层是第L层。 n[l] n [ l ] 表示第 l l 层包含的单元个数,l=0,1,,L。这个模型中, n[0]=nx=3 n [ 0 ] = n x = 3 ,表示三个输入特征 x1,x2,x3 x 1 , x 2 , x 3 n[1]=5 n [ 1 ] = 5 n[2]=5 n [ 2 ] = 5 n[3]=3 n [ 3 ] = 3 n[4]=n[L]=1 n [ 4 ] = n [ L ] = 1 。第 l l 层的激活函数输出用a[l]表示, a[l]=g[l](z[l]) a [ l ] = g [ l ] ( z [ l ] ) W[l] W [ l ] 表示第 l l 层的权重,用于计算z[l]。另外,我们把输入x记为 a[0] a [ 0 ] ,把输出层 y^ y ^ 记为 a[L] a [ L ]

    注意, a[l] a [ l ] W[l] W [ l ] 中的上标 l l 都是从1开始的,l=1,,L

    这里写图片描述

    2. Forward Propagation in a Deep Network

    接下来,我们来推导一下深层神经网络的正向传播过程。仍以上面讲过的4层神经网络为例,对于单个样本:

    第1层, l=1 l = 1

    z[1]=W[1]x+b[1]=W[1]a[0]+b[1] z [ 1 ] = W [ 1 ] x + b [ 1 ] = W [ 1 ] a [ 0 ] + b [ 1 ]

    a[1]=g[1](z[1]) a [ 1 ] = g [ 1 ] ( z [ 1 ] )

    第2层, l=2 l = 2

    z[2]=W[2]a[1]+b[2] z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ]

    a[2]=g[2](z[2]) a [ 2 ] = g [ 2 ] ( z [ 2 ] )

    第3层, l=3 l = 3

    z[3]=W[3]a[2]+b[3] z [ 3 ] = W [ 3 ] a [ 2 ] + b [ 3 ]

    a[3]=g[3](z[3]) a [ 3 ] = g [ 3 ] ( z [ 3 ] )

    第4层, l=4 l = 4

    z[4]=W[4]a[3]+b[4] z [ 4 ] = W [ 4 ] a [ 3 ] + b [ 4 ]

    a[4]=g[4](z[4]) a [ 4 ] = g [ 4 ] ( z [ 4 ] )

    如果有m个训练样本,其向量化矩阵形式为:

    第1层, l=1 l = 1

    Z[1]=W[1]X+b[1]=W[1]A[0]+b[1] Z [ 1 ] = W [ 1 ] X + b [ 1 ] = W [ 1 ] A [ 0 ] + b [ 1 ]

    A[1]=g[1](Z[1]) A [ 1 ] = g [ 1 ] ( Z [ 1 ] )

    第2层, l=2 l = 2

    Z[2]=W[2]A[1]+b[2] Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ]

    A[2]=g[2](Z[2]) A [ 2 ] = g [ 2 ] ( Z [ 2 ] )

    第3层, l=3 l = 3

    Z[3]=W[3]A[2]+b[3] Z [ 3 ] = W [ 3 ] A [ 2 ] + b [ 3 ]

    A[3]=g[3](Z[3]) A [ 3 ] = g [ 3 ] ( Z [ 3 ] )

    第4层, l=4 l = 4

    Z[4]=W[4]A[3]+b[4] Z [ 4 ] = W [ 4 ] A [ 3 ] + b [ 4 ]

    A[4]=g[4](Z[4]) A [ 4 ] = g [ 4 ] ( Z [ 4 ] )

    综上所述,对于第 l l 层,其正向传播过程的Z[l] A[l] A [ l ] 可以表示为:

    Z[l]=W[l]A[l1]+b[l] Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ]

    A[l]=g[l](Z[l]) A [ l ] = g [ l ] ( Z [ l ] )

    其中 l=1,,L l = 1 , ⋯ , L

    3. Getting your matrix dimensions right

    对于单个训练样本,输入x的维度是( n[0],1 n [ 0 ] , 1 )神经网络的参数 W[l] W [ l ] b[l] b [ l ] 的维度分别是:

    W[l]: (n[l],n[l1]) W [ l ] :   ( n [ l ] , n [ l − 1 ] )

    b[l]: (n[l],1) b [ l ] :   ( n [ l ] , 1 )

    其中, l=1,,L l = 1 , ⋯ , L n[l] n [ l ] n[l1] n [ l − 1 ] 分别表示第 l l 层和l1层的所含单元个数。 n[0]=nx n [ 0 ] = n x ,表示输入层特征数目。

    顺便提一下,反向传播过程中的 dW[l] d W [ l ] db[l] d b [ l ] 的维度分别是:

    dW[l]: (n[l],n[l1]) d W [ l ] :   ( n [ l ] , n [ l − 1 ] )

    db[l]: (n[l],1) d b [ l ] :   ( n [ l ] , 1 )

    注意到, W[l] W [ l ] dW[l] d W [ l ] 维度相同, b[l] b [ l ] db[l] d b [ l ] 维度相同。这很容易理解。

    正向传播过程中的 z[l] z [ l ] a[l] a [ l ] 的维度分别是:

    z[l]: (n[l],1) z [ l ] :   ( n [ l ] , 1 )

    a[l]: (n[l],1) a [ l ] :   ( n [ l ] , 1 )

    z[l] z [ l ] a[l] a [ l ] 的维度是一样的,且 dz[l] d z [ l ] da[l] d a [ l ] 的维度均与 z[l] z [ l ] a[l] a [ l ] 的维度一致。

    对于m个训练样本,输入矩阵X的维度是( n[0],m n [ 0 ] , m )。需要注意的是 W[l] W [ l ] b[l] b [ l ] 的维度与只有单个样本是一致的:

    W[l]: (n[l],n[l1]) W [ l ] :   ( n [ l ] , n [ l − 1 ] )

    b[l]: (n[l],1) b [ l ] :   ( n [ l ] , 1 )

    只不过在运算 Z[l]=W[l]A[l1]+b[l] Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] 中, b[l] b [ l ] 会被当成( n[l],m n [ l ] , m )矩阵进行运算,这是因为python的广播性质,且 b[l] b [ l ] 每一列向量都是一样的。 dW[l] d W [ l ] db[l] d b [ l ] 的维度分别与 W[l] W [ l ] b[l] b [ l ] 的相同。

    但是, Z[l] Z [ l ] A[l] A [ l ] 的维度发生了变化:

    Z[l]: (n[l],m) Z [ l ] :   ( n [ l ] , m )

    A[l]: (n[l],m) A [ l ] :   ( n [ l ] , m )

    dZ[l] d Z [ l ] dA[l] d A [ l ] 的维度分别与 Z[l] Z [ l ] A[l] A [ l ] 的相同。

    4. Why deep representations?

    我们都知道神经网络能处理很多问题,而且效果显著。其强大能力主要源自神经网络足够“深”,也就是说网络层数越多,神经网络就更加复杂和深入,学习也更加准确。接下来,我们从几个例子入手,看一下为什么深度网络能够如此强大。

    先来看人脸识别的例子,如下图所示。经过训练,神经网络第一层所做的事就是从原始图片中提取出人脸的轮廓与边缘,即边缘检测。这样每个神经元得到的是一些边缘信息。神经网络第二层所做的事情就是将前一层的边缘进行组合,组合成人脸一些局部特征,比如眼睛、鼻子、嘴巴等。再往后面,就将这些局部特征组合起来,融合成人脸的模样。可以看出,随着层数由浅到深,神经网络提取的特征也是从边缘到局部特征到整体,由简单到复杂。可见,如果隐藏层足够多,那么能够提取的特征就越丰富、越复杂,模型的准确率就会越高。

    语音识别模型也是这个道理。浅层的神经元能够检测一些简单的音调,然后较深的神经元能够检测出基本的音素,更深的神经元就能够检测出单词信息。如果网络够深,还能对短语、句子进行检测。记住一点,神经网络从左到右,神经元提取的特征从简单到复杂。特征复杂度与神经网络层数成正相关。特征越来越复杂,功能也越来越强大。

    这里写图片描述

    除了从提取特征复杂度的角度来说明深层网络的优势之外,深层网络还有另外一个优点,就是能够减少神经元个数,从而减少计算量。例如下面这个例子,使用电路理论,计算逻辑输出:

    y=x1x2x3xn y = x 1 ⊕ x 2 ⊕ x 3 ⊕ ⋯ ⊕ x n

    其中, 表示异或操作。对于这个逻辑运算,如果使用深度网络,深度网络的结构是每层将前一层的两两单元进行异或,最后到一个输出,如下图左边所示。这样,整个深度网络的层数是 log2(n) l o g 2 ( n ) ,不包含输入层。总共使用的神经元个数为:

    1+2++2log2(n)1=112log2(n)12=2log2(n)1=n1 1 + 2 + ⋯ + 2 l o g 2 ( n ) − 1 = 1 ⋅ 1 − 2 l o g 2 ( n ) 1 − 2 = 2 l o g 2 ( n ) − 1 = n − 1

    可见,输入个数是n,这种深层网络所需的神经元个数仅仅是n-1个。

    如果不用深层网络,仅仅使用单个隐藏层,那么需要的神经元个数将是指数级别那么大。Andrew指出,由于包含了所有的逻辑位(0和1),则需要 2n1 2 n − 1 个神经元。这里笔者推导的是 2n 2 n 个神经元,为啥是 2n1 2 n − 1 请哪位高手解释下。

    比较下来,处理同一逻辑问题,深层网络所需的神经元个数比浅层网络要少很多。这也是深层神经网络的优点之一。

    尽管深度学习有着非常显著的优势,Andrew还是建议对实际问题进行建模时,尽量先选择层数少的神经网络模型,这也符合奥卡姆剃刀定律(Occam’s Razor)。对于比较复杂的问题,再使用较深的神经网络模型。

    5. Building blocks of deep neural networks

    下面用流程块图来解释神经网络正向传播和反向传播过程。如下图所示,对于第 l l 层来说,正向传播过程中:

    输入:a[l1]

    输出: a[l] a [ l ]

    参数: W[l],b[l] W [ l ] , b [ l ]

    缓存变量: z[l] z [ l ]

    反向传播过程中:

    输入: da[l] d a [ l ]

    输出: da[l1],dW[l],db[l] d a [ l − 1 ] , d W [ l ] , d b [ l ]

    参数: W[l],b[l] W [ l ] , b [ l ]

    这里写图片描述

    刚才这是第 l l 层的流程块图,对于神经网络所有层,整体的流程块图正向传播过程和反向传播过程如下所示:

    这里写图片描述

    6. Forward and Backward Propagation

    我们继续接着上一部分流程块图的内容,推导神经网络正向传播过程和反向传播过程的具体表达式。

    首先是正向传播过程,令层数为第l层,输入是 a[l1] a [ l − 1 ] ,输出是 a[l] a [ l ] ,缓存变量是 z[l] z [ l ] 。其表达式如下:

    z[l]=W[l]a[l1]+b[l] z [ l ] = W [ l ] a [ l − 1 ] + b [ l ]

    a[l]=g[l](z[l]) a [ l ] = g [ l ] ( z [ l ] )

    m个训练样本,向量化形式为:

    Z[l]=W[l]A[l1]+b[l] Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ]

    A[l]=g[l](Z[l]) A [ l ] = g [ l ] ( Z [ l ] )

    然后是反向传播过程,输入是 da[l] d a [ l ] ,输出是 da[l1],dw[l],db[l] d a [ l − 1 ] , d w [ l ] , d b [ l ] 。其表达式如下:

    dz[l]=da[l]g[l](z[l]) d z [ l ] = d a [ l ] ∗ g [ l ] ′ ( z [ l ] )

    dW[l]=dz[l]a[l1] d W [ l ] = d z [ l ] ⋅ a [ l − 1 ]

    db[l]=dz[l] d b [ l ] = d z [ l ]

    da[l1]=W[l]Tdz[l] d a [ l − 1 ] = W [ l ] T ⋅ d z [ l ]

    由上述第四个表达式可得 da[l]=W[l+1]Tdz[l+1] d a [ l ] = W [ l + 1 ] T ⋅ d z [ l + 1 ] ,将 da[l] d a [ l ] 代入第一个表达式中可以得到:

    dz[l]=W[l+1]Tdz[l+1]g[l](z[l]) d z [ l ] = W [ l + 1 ] T ⋅ d z [ l + 1 ] ∗ g [ l ] ′ ( z [ l ] )

    该式非常重要,反映了 dz[l+1] d z [ l + 1 ] dz[l] d z [ l ] 的递推关系。

    m个训练样本,向量化形式为:

    dZ[l]=dA[l]g[l](Z[l]) d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] )

    dW[l]=1mdZ[l]A[l1]T d W [ l ] = 1 m d Z [ l ] ⋅ A [ l − 1 ] T

    db[l]=1mnp.sum(dZ[l],axis=1,keepdim=True) d b [ l ] = 1 m n p . s u m ( d Z [ l ] , a x i s = 1 , k e e p d i m = T r u e )

    dA[l1]=W[l]TdZ[l] d A [ l − 1 ] = W [ l ] T ⋅ d Z [ l ]

    dZ[l]=W[l+1]TdZ[l+1]g[l](Z[l]) d Z [ l ] = W [ l + 1 ] T ⋅ d Z [ l + 1 ] ∗ g [ l ] ′ ( Z [ l ] )

    7. Parameters vs Hyperparameters

    该部分介绍神经网络中的参数(parameters)和超参数(hyperparameters)的概念。

    神经网络中的参数就是我们熟悉的 W[l] W [ l ] b[l] b [ l ] 。而超参数则是例如学习速率 α α ,训练迭代次数N,神经网络层数L,各层神经元个数 n[l] n [ l ] ,激活函数 g(z) g ( z ) 等。之所以叫做超参数的原因是它们决定了参数 W[l] W [ l ] b[l] b [ l ] 的值。在后面的第二门课我们还将学习其它的超参数,这里先不讨论。

    如何设置最优的超参数是一个比较困难的、需要经验知识的问题。通常的做法是选择超参数一定范围内的值,分别代入神经网络进行训练,测试cost function随着迭代次数增加的变化,根据结果选择cost function最小时对应的超参数值。这类似于validation的方法。

    8. What does this have to do with the brain?

    那么,神经网络跟人脑机制到底有什么联系呢?究竟有多少的相似程度?神经网络实际上可以分成两个部分:正向传播过程和反向传播过程。神经网络的每个神经元采用激活函数的方式,类似于感知机模型。这种模型与人脑神经元是类似的,可以说是一种非常简化的人脑神经元模型。如下图所示,人脑神经元可分为树突、细胞体、轴突三部分。树突接收外界电刺激信号(类比神经网络中神经元输入),传递给细胞体进行处理(类比神经网络中神经元激活函数运算),最后由轴突传递给下一个神经元(类比神经网络中神经元输出)。

    值得一提的是,人脑神经元的结构和处理方式要复杂的多,神经网络模型只是非常简化的模型。人脑如何进行学习?是否也是通过反向传播和梯度下降算法现在还不清楚,可能会更加复杂。这是值得生物学家探索的事情。也许发现重要的新的人脑学习机制后,让我们的神经网络模型抛弃反向传播和梯度下降算法,能够实现更加准确和强大的神经网络模型!

    这里写图片描述

    9. Summary

    本节课主要介绍了深层神经网络,是上一节浅层神经网络的拓展和归纳。首先,我们介绍了建立神经网络模型一些常用的标准的标记符号。然后,用流程块图的方式详细推导正向传播过程和反向传播过程的输入输出和参数表达式。我们也从提取特征复杂性和计算量的角度分别解释了深层神经网络为什么优于浅层神经网络。接着,我们介绍了超参数的概念,解释了超参数与参数的区别。最后,我们将神经网络与人脑做了类别,人工神经网络是简化的人脑模型。

    至此,Andew深度学习专项课程第一门课《神经网络与深度学习》结束。

    更多AI资源请关注公众号:红色石头的机器学习之路(ID:redstonewill)
    这里写图片描述

    展开全文
  • 我的CSDN博客地址:红色石头的专栏 我的知乎主页:红色石头 我的微博:RedstoneWill的微博 我的GitHub:RedstoneWill的GitHub 我的微信公众号:红色石头的机器学习之路...8 月 8 日,吴恩达在他自己创办的在...

    红色石头的个人网站:redstonewill.com

    吴恩达(Andrew Ng)相信大家都不陌生了。8 月 8 日,吴恩达在他自己创办的在线教育平台 Coursera 上线了他的人工智能专项课程(Deep Learning Specialization)。此课程广受好评,通过视频讲解、作业与测验等让更多的人对人工智能有了了解与启蒙,国外媒体报道称:吴恩达这次深度学习课程是迄今为止,最全面、系统和容易获取的深度学习课程,堪称普通人的人工智能第一课。

    该专项课程的Coursera地址:https://www.coursera.org/specializations/deep-learning

    另外,网易云课堂前段时间宣布跟吴恩达合作,拿到了独家版权,开设了深度学习微专业课,并且提供中文字幕翻译,降低了学习门槛。但是只有视频和课件材料,没有Coursera 上的作业、考试等环节,也不会提供证书,需要证书的还得去 Coursera 上学习。这里附上网易云课堂该专项课程的地址:http://mooc.study.163.com/smartSpec/detail/1001319001.htm

    好了,在接下来的一段时间里,我将同步开始学习Coursera上深度学习专项课程,并将笔记以博客的形式记录下来。专项课程的第一门课是《神经网络与深度学习》。今天介绍第一讲:深度学习概述。

    What is a neural network?

    简单来说,深度学习(Deep Learning)就是更复杂的神经网络(Neural Network)。那么,什么是神经网络呢?下面我们将通过一个简单的例子来引入神经网络模型的概念。

    假如我们要建立房价的预测模型,一共有六个房子。我们已知输入x即每个房子的面积(多少尺或者多少平方米),还知道其对应的输出y即每个房子的价格。根据这些输入输出,我们要建立一个函数模型,来预测房价:y=f(x)。首先,我们将已知的六间房子的价格和面积的关系绘制在二维平面上,如下图所示:

    这里写图片描述

    一般地,我们会一条直线来拟合图中这些离散点,即建立房价与面积的线性模型。但是从实际考虑,我们知道价格永远不会是负数。所以,我们对该直线做一点点修正,让它变成折线的形状,当面积小于某个值时,价格始终为零。如下图蓝色折线所示,就是我们建立的房价预测模型。

    这里写图片描述

    其实这个简单的模型(蓝色折线)就可以看成是一个神经网络,而且几乎是一个最简单的神经网络。我们把该房价预测用一个最简单的神经网络模型来表示,如下图所示:

    这里写图片描述

    该神经网络的输入x是房屋面积,输出y是房屋价格,中间包含了一个神经元(neuron),即房价预测函数(蓝色折线)。该神经元的功能就是实现函数f(x)的功能。

    值得一提的是,上图神经元的预测函数(蓝色折线)在神经网络应用中比较常见。我们把这个函数称为ReLU函数,即线性整流函数(Rectified Linear Unit),形如下图所示:

    这里写图片描述

    上面讲的只是由单个神经元(输入x仅仅是房屋面积一个因素)组成的神经网络,而通常一个大型的神经网络往往由许多神经元组成,就像通过乐高积木搭建复杂物体(例如火车)一样。

    现在,我们把上面举的房价预测的例子变得复杂一些,而不是仅仅使用房屋面积一个判断因素。例如,除了考虑房屋面积(size)之外,我们还考虑卧室数目(#bedrooms)。这两点实际上与家庭成员的个数(family size)有关。还有,房屋的邮政编码(zip code/postal code),代表了该房屋位置的交通便利性,是否需要步行还是开车?即决定了可步行性(walkability)。另外,还有可能邮政编码和地区财富水平(wealth)共同影响了房屋所在地区的学校质量(school quality)。如下图所示,该神经网络共有三个神经元,分别代表了family size,walkability和school quality。每一个神经元都包含了一个ReLU函数(或者其它非线性函数)。那么,根据这个模型,我们可以根据房屋的面积和卧室个数来估计family size,根据邮政编码来估计walkability,根据邮政编码和财富水平来估计school quality。最后,由family size,walkability和school quality等这些人们比较关心的因素来预测最终的房屋价格。

    这里写图片描述

    所以,在这个例子中,x是size,#bedrooms,zip code/postal code和wealth这四个输入;y是房屋的预测价格。这个神经网络模型包含的神经元个数更多一些,相对之前的单个神经元的模型要更加复杂。那么,在建立一个表现良好的神经网络模型之后,在给定输入x时,就能得到比较好的输出y,即房屋的预测价格。

    实际上,上面这个例子真正的神经网络模型结构如下所示。它有四个输入,分别是size,#bedrooms,zip code和wealth。在给定这四个输入后,神经网络所做的就是输出房屋的预测价格y。图中,三个神经元所在的位置称之为中间层或者隐藏层(x所在的称之为输入层,y所在的称之为输出层),每个神经元与所有的输入x都有关联(直线相连)。

    这里写图片描述

    这就是基本的神经网络模型结构。在训练的过程中,只要有足够的输入x和输出y,就能训练出较好的神经网络模型,该模型在此类房价预测问题中,能够得到比较准确的结果。

    Supervised Learning with Neural Networks

    目前为止,由神经网络模型创造的价值基本上都是基于监督式学习(Supervised Learning)的。监督式学习与非监督式学习本质区别就是是否已知训练样本的输出y。在实际应用中,机器学习解决的大部分问题都属于监督式学习,神经网络模型也大都属于监督式学习。下面我们来看几个监督式学习在神经网络中应用的例子。

    首先,第一个例子还是房屋价格预测。根据训练样本的输入x和输出y,训练神经网络模型,预测房价。第二个例子是线上广告,这是深度学习最广泛、最赚钱的应用之一。其中,输入x是广告和用户个人信息,输出y是用户是否对广告进行点击。神经网络模型经过训练,能够根据广告类型和用户信息对用户的点击行为进行预测,从而向用户提供用户自己可能感兴趣的广告。第三个例子是电脑视觉(computer vision)。电脑视觉是近些年来越来越火的课题,而电脑视觉发展迅速的原因很大程度上是得益于深度学习。其中,输入x是图片像素值,输出是图片所属的不同类别。第四个例子是语音识别(speech recognition)。深度学习可以将一段语音信号辨识为相应的文字信息。第五个例子是智能翻译,例如通过神经网络输入英文,然后直接输出中文。除此之外,第六个例子是自动驾驶。通过输入一张图片或者汽车雷达信息,神经网络通过训练来告诉你相应的路况信息并作出相应的决策。至此,神经网络配合监督式学习,其应用是非常广泛的。

    这里写图片描述

    我们应该知道,根据不同的问题和应用场合,应该使用不同类型的神经网络模型。例如上面介绍的几个例子中,对于一般的监督式学习(房价预测和线上广告问题),我们只要使用标准的神经网络模型就可以了。而对于图像识别处理问题,我们则要使用卷积神经网络(Convolution Neural Network),即CNN。而对于处理类似语音这样的序列信号时,则要使用循环神经网络(Recurrent Neural Network),即RNN。还有其它的例如自动驾驶这样的复杂问题则需要更加复杂的混合神经网络模型。

    CNN和RNN是比较常用的神经网络模型。下图给出了Standard NN,Convolutional NN和Recurrent NN的神经网络结构图。

    这里写图片描述

    CNN一般处理图像问题,RNN一般处理语音信号。他们的结构是什么意思?如何实现CNN和RNN的结构?这些问题我们将在以后的课程中来深入分析并解决。

    另外,数据类型一般分为两种:Structured Data和Unstructured Data。

    这里写图片描述

    简单地说,Structured Data通常指的是有实际意义的数据。例如房价预测中的size,#bedrooms,price等;例如在线广告中的User Age,Ad ID等。这些数据都具有实际的物理意义,比较容易理解。而Unstructured Data通常指的是比较抽象的数据,例如Audio,Image或者Text。以前,计算机对于Unstructured Data比较难以处理,而人类对Unstructured Data却能够处理的比较好,例如我们第一眼很容易就识别出一张图片里是否有猫,但对于计算机来说并不那么简单。现在,值得庆幸的是,由于深度学习和神经网络的发展,计算机在处理Unstructured Data方面效果越来越好,甚至在某些方面优于人类。总的来说,神经网络与深度学习无论对Structured Data还是Unstructured Data都能处理得越来越好,并逐渐创造出巨大的实用价值。我们在之后的学习和实际应用中也将会碰到许多Structured Data和Unstructured Data。

    Why is Deep Learning taking off?

    如果说深度学习和神经网络背后的技术思想已经出现数十年了,那么为什么直到现在才开始发挥作用呢?接下来,我们来看一下深度学习背后的主要动力是什么,方便我们更好地理解并使用深度学习来解决更多问题。

    深度学习为什么这么强大?下面我们用一张图来说明。如下图所示,横坐标x表示数据量(Amount of data),纵坐标y表示机器学习模型的性能表现(Performance)。

    这里写图片描述

    上图共有4条曲线。其中,最底下的那条红色曲线代表了传统机器学习算法的表现,例如是SVM,logistic regression,decision tree等。当数据量比较小的时候,传统学习模型的表现是比较好的。但是当数据量很大的时候,其表现很一般,性能基本趋于水平。红色曲线上面的那条黄色曲线代表了规模较小的神经网络模型(Small NN)。它在数据量较大时候的性能优于传统的机器学习算法。黄色曲线上面的蓝色曲线代表了规模中等的神经网络模型(Media NN),它在在数据量更大的时候的表现比Small NN更好。最上面的那条绿色曲线代表更大规模的神经网络(Large NN),即深度学习模型。从图中可以看到,在数据量很大的时候,它的表现仍然是最好的,而且基本上保持了较快上升的趋势。值得一提的是,近些年来,由于数字计算机的普及,人类进入了大数据时代,每时每分,互联网上的数据是海量的、庞大的。如何对大数据建立稳健准确的学习模型变得尤为重要。传统机器学习算法在数据量较大的时候,性能一般,很难再有提升。然而,深度学习模型由于网络复杂,对大数据的处理和分析非常有效。所以,近些年来,在处理海量数据和建立复杂准确的学习模型方面,深度学习有着非常不错的表现。然而,在数据量不大的时候,例如上图中左边区域,深度学习模型不一定优于传统机器学习算法,性能差异可能并不大。

    所以说,现在深度学习如此强大的原因归结为三个因素:

    • Data

    • Computation

    • Algorithms

    其中,数据量的几何级数增加,加上GPU出现、计算机运算能力的大大提升,使得深度学习能够应用得更加广泛。另外,算法上的创新和改进让深度学习的性能和速度也大大提升。举个算法改进的例子,之前神经网络神经元的激活函数是Sigmoid函数,后来改成了ReLU函数。之所以这样更改的原因是对于Sigmoid函数,在远离零点的位置,函数曲线非常平缓,其梯度趋于0,所以造成神经网络模型学习速度变得很慢。然而,ReLU函数在x大于零的区域,其梯度始终为1,尽管在x小于零的区域梯度为0,但是在实际应用中采用ReLU函数确实要比Sigmoid函数快很多。

    构建一个深度学习的流程是首先产生Idea,然后将Idea转化为Code,最后进行Experiment。接着根据结果修改Idea,继续这种Idea->Code->Experiment的循环,直到最终训练得到表现不错的深度学习网络模型。如果计算速度越快,每一步骤耗时越少,那么上述循环越能高效进行。

    About this Course

    这里简单列一下本系列深度学习专项课程有哪些:

    • Neural Networks and Deep Learning

    • Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

    • Structuring your Machine Learning project

    • Convolutional Neural Networks

    • Natural Language Processing: Building sequence models

    目前我们正在学习的是第一门课《Neural Networks and Deep Learning》。Coursera上关于这门课的教学日程安排如下:

    • Week 1: Introduction

    • Week 2: Basics of Neural Network programming

    • Week 3: One hidden layer Neural Networks

    • Week 4: Deep Neural Networks

    这门课我打算用5次笔记进行总结。

    Summary

    本节课的内容比较简单,主要对深度学习进行了简要概述。首先,我们使用房价预测的例子来建立最简单的但个神经元组成的神经网络模型。然后,我们将例子复杂化,建立标准的神经网络模型结构。接着,我们从监督式学习入手,介绍了不同的神经网络类型,包括Standard NN,CNN和RNN。不同的神经网络模型适合处理不同类型的问题。对数据集本身来说,分为Structured Data和Unstructured Data。近些年来,深度学习对Unstructured Data的处理能力大大提高,例如图像处理、语音识别和语言翻译等。最后,我们用一张对比图片解释了深度学习现在飞速发展、功能强大的原因。归纳其原因包含三点:Data,Computation和Algorithms。

    更多AI资源请关注公众号:红色石头的机器学习之路(ID:redstonewill)
    这里写图片描述

    展开全文
  • 8、神经网络 8.1 非线性假设 图像识别难,计算机看到的是灰度矩阵/RGB存储量x3 8.2 神经元和大脑 假设大脑思维方式不需要成千上万算法,而只需要一个。 躯体感觉皮层进行神经重接(视觉)实验,该皮层也能学会看...

    第四周

    8、神经网络

    • 8.1 非线性假设

    图像识别难,计算机看到的是灰度矩阵/RGB存储量x3

    • 8.2 神经元和大脑

    假设大脑思维方式不需要成千上万算法,而只需要一个。

    躯体感觉皮层进行神经重接(视觉)实验,该皮层也能学会看。

    如果人体有同一块脑组织可以处理光、声或触觉信号,也许存在一种学习算法,可以同时处理视觉、听觉和触觉。

    • 8.3 模型展示1

    神经元(激活单位),输入/树突,输出/轴突

    第一层成为输入层,最后一 层称为输出层,中间一层成为隐藏层
    第(2)层第i个激活单元,θ权重矩阵

    每一个𝑎都是由上一层所有的𝑥和每一个𝑥所对应的θ决定的。从左到右的算法称为前向传播算法。

    θ.X = a
    • 8.4 模型展示2

    右半部分其实就是以𝑎0, 𝑎1, 𝑎2, 𝑎3, 按照逻辑回归的方式输出ℎ𝜃(𝑥)

    神经网络 vs 逻辑回归

    只是把逻辑回归的输入向量变成中间层

    • 8.5 特征和直观理解1

    单层神经网络和逻辑回归很像。

    • 8.6 样本和直观理解2

    若要实现逻辑非,在预计得到非结果的变量前放一个很大的负权重。

    将表示 AND 的神经元和表示(NOT x1) AND (NOT x2)的神经元以及表示 OR 的神经元进行组合,得到了一个能实现 XNOR 运算符功能的神经网络如下。

    类似逻辑电路

     

    • 8.7 多类分类

    输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现[𝑎 𝑏 𝑐 𝑑]𝑇,且𝑎, 𝑏, 𝑐, 𝑑中仅有一个为 1,表示当前类。

    第五周

    9、神经网络的学习

    9.1 代价函数

    9.2 反向传播

    信息前向传播,误差反向传播

    9.7 综合起来

    训练神经网络:

    1. 参数的随机初始化
    2. 利用正向传播方法计算所有的ℎ𝜃(𝑥)
    3. 编写计算代价函数 𝐽 的代码 
    4. 利用反向传播方法计算所有偏导数
    5. 利用数值检验方法检验这些偏导数
    6. 使用优化算法来最小化代价函数

    第六周

    10、应用机器学习的建议

    10.2 评估一个假设

    70%数据做训练集,30%数据做测试集

    10.3 模型选择和交叉验证集

    60%数据训练集:用来训练θ

    20%数据交叉验证:选择多项式

    20%数据测试集:判断泛化能力

    10.4 偏差和方差

    训练集误差和交叉验证集误差近似时:偏差/欠拟合

    交叉验证集误差远大于训练集误差时:方差/过拟合

    10.5 正则化和偏差/方差

    选择合适的入,0-10之间呈现2倍关系的值,分为12组试试

    Jθ代价函数,Jcv交叉验证误差

    10.6 学习曲线

    高偏差/欠拟合增加训练集无帮助

    高方差/欠拟合有帮助

    10.7 决定下一步做什么

    模型有较大误差:

    1. 获得更多的训练实例 —— 解决高方差
    2. 尝试减少特征的数量 —— 解决高方差
    3. 尝试获得更多的特征 —— 解决高偏差
    4. 尝试增加多项式特征 —— 解决高偏差
    5. 尝试减少正则化程度 λ—— 解决高偏差
    6. 尝试增加正则化程度 λ—— 解决高方差

    较小神经网络计算量小,易出现欠拟合;大型神经网络已出现过拟合。

    通常选择较大神经网络并采用正则化,比直接采用小型效果更好。

    神经网络层数的选择:通过将数据分为:训练集、交叉验证集和训练集,进行训练

    11、机器学习系统的设计

    11.2 误差分析

    1. 从一个简单的能快速实现的算法开始:实现该算法并用交叉验证集数据测试这个算法
    2. 绘制学习曲线:决定是增加更多数据,或者添加更多特征,还是其他选择
    3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些

    11.3 类偏斜的误差度量

    查准率 =TP/(TP+FP)

    查全率 =TP/(TP+FN)

    11.4 查准率和查全率之间的权衡

    阈值越大,判断为真的正确率越高,但是会遗漏更多正样本

    max(F1)选择阈值,会考虑查准率和查全率平均值,但会给其中较低的值更高权重

    F1=2\frac{PR}{P+R}(Precision/Recall)

    11.5 机器学习的数据

    取得成功的人不是拥有最好算法的人,而是拥有最多数据的人

    第七周

    12、支持向量机SVM

    12.1 优化目标

    12.2 大边界的直观理解

    支持向量机 = 大间距分类器,具有鲁棒性

    正则化参数C,设置的非常大,遇到异常点会更改边界。

    C不是太大,会忽略一些异常点,得到更好的边界

    回顾 𝐶 = 1/𝜆,因此:

    𝐶 较大时,相当于 𝜆 较小,可能会导致过拟合,高方差。

    𝐶 较小时,相当于 𝜆 较大,可能会导致低拟合,高偏差

    12.3 大边界分类背后的数学

    参数向量𝜃事实上是和决策界是 90 度正交的。

     

    支持向量机最终可以找到一个较小的𝜃范数。这正是支持向量机中最小化目标函数的目的。

    12.4 核函数1

    𝑠𝑖𝑚𝑖𝑙𝑎𝑟𝑖𝑡𝑦(𝑥, 𝑙(1))就是核函数

    δ^2越大,从顶点移走,特征变量值减小速度会比较慢

    离L(1)近,f_1=1,离其他远,为0

    不使用核函数就是线性核函数。

    下面是支持向量机的两个参数𝐶𝜎的影响:

    • 𝐶 = 1/𝜆
    • 𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
    • 𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
    • 𝜎较大时,可能会导致低方差,高偏差;
    • 𝜎较小时,可能会导致低偏差,高方差。

    12.6 使用支持向量机

    核函数解决高偏差,可构建复杂的非线性决策边界。

    从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?

    逻辑回归和不带核函数的SVM相似。

    下面是一些普遍使用的准则:

    𝑛为特征数,𝑚为训练样本数。

    (1)如果相较于𝑚而言,𝑛要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

    (2)如果𝑛较小,而且𝑚大小中等,例如𝑛1-1000 之间,而𝑚10-10000 之间,使用高斯核函数的支持向量机。

    (3)如果𝑛较小,而𝑚较大,例如𝑛1-1000 之间,而𝑚大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机

    神经网络有时训练起来比较慢。

     

     

    展开全文
  • 吴恩达深度学习—01神经网络和深度学习,总思维导图 https://blog.csdn.net/qq_41890041/article/details/107752760 Coursera吴恩达神经网络与深度学习》课程笔记(1)-- 深度学习概述 ...Coursera吴恩达神经网络与...

    吴恩达深度学习01——神经网络和深度学习

    总思维导图

    https://blog.csdn.net/qq_41890041/article/details/107752760

    作业

    https://blog.csdn.net/u013733326/article/details/79827273

    1、Coursera吴恩达《神经网络与深度学习》课程笔记(1)-- 深度学习概述

    https://zhuanlan.zhihu.com/p/29017066

    2、Coursera吴恩达《神经网络与深度学习》课程笔记(2.1)-- 神经网络基础之逻辑回归 (2.2)–神经网络基础之Python与向量化

    https://blog.csdn.net/red_stone1/article/details/77851177
    https://zhuanlan.zhihu.com/p/29258042

    3、Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 浅层神经网络

    https://blog.csdn.net/red_stone1/article/details/78018269

    4、Coursera吴恩达《神经网络与深度学习》课程笔记(4)-- 深层神经网络

    https://blog.csdn.net/gaotihong/article/details/81213812

    *[DeeplearningAI笔记]第一章人工智能行业大师访谈

    https://www.cnblogs.com/cloud-ken/p/7683268.html

    吴恩达深度学习02——改善深层神经网络之优化算法

    1、Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面

    https://redstonewill.blog.csdn.net/article/details/78208851

    2、Coursera吴恩达《优化深度神经网络》课程笔记(2)-- 优化算法

    https://redstonewill.blog.csdn.net/article/details/78348753

    3、Coursera吴恩达《优化深度神经网络》课程笔记(3)-- 超参数调试、Batch正则化和编程框架

    https://redstonewill.blog.csdn.net/article/details/78403416

    吴恩达深度学习03——构建机器学习项目

    1、Coursera吴恩达《构建机器学习项目》课程笔记(1)-- 机器学习策略(上)

    https://redstonewill.blog.csdn.net/article/details/78519599

    2、Coursera吴恩达《构建机器学习项目》课程笔记(2)-- 机器学习策略(下)

    https://redstonewill.blog.csdn.net/article/details/78600255

    吴恩达深度学习04——卷积神经网络

    1、Coursera吴恩达《卷积神经网络》课程笔记(1)-- 卷积神经网络基础

    https://redstonewill.blog.csdn.net/article/details/78651063

    2、Coursera吴恩达《卷积神经网络》课程笔记(2)-- 深度卷积模型:案例研究

    https://redstonewill.blog.csdn.net/article/details/78769236

    3、Coursera吴恩达《卷积神经网络》课程笔记(3)-- 目标检测

    https://redstonewill.blog.csdn.net/article/details/79028058

    4、Coursera吴恩达《卷积神经网络》课程笔记(4)-- 人脸识别与神经风格迁移

    https://redstonewill.blog.csdn.net/article/details/79055467

    吴恩达深度学习04——序列模型

    1、Coursera吴恩达《序列模型》课程笔记(1)-- 循环神经网络(RNN)

    https://redstonewill.blog.csdn.net/article/details/79446105

    2、Coursera吴恩达《序列模型》课程笔记(2)-- NLP & Word Embeddings

    https://redstonewill.blog.csdn.net/article/details/79648626

    3、Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models & Attention mechanism

    https://redstonewill.blog.csdn.net/article/details/79785058

    展开全文
  • 本文是吴恩达深度学习第一课:神经网络与深度学习的笔记。神经网络与深度学习主要讨论了如何建立神经网络(包括一个深度神经网络)、以及如何训练这个网络。 第一课有以下四个部分,本文是第三部分。 深度学习概论 ...
  • 深度学习必然要接触人工神经网络人工神经网络是什么鬼?请看下图。       what the fxxk! 看3秒看不懂,本次学习结束。之后再碰到,就会说神经网络不是正常人类能学会的。 wait! 饭要一口一口的吃 ...
  • 我们都知道深度神经网络能解决好多问题,其实并不需要很大的神经网络,但是得有深度,得有比较多的隐藏层,这是为什么呢? 我们一起来看几个例子来帮助理解,为什么深度神经网络会很好用。 首先,深度网络在计算什么...
  • 本笔记主要参考了红色石头的笔记,在此表示感谢。 本课程对应的作业,本人已翻译,放在github上,地址如下: ...首先介绍神经网络的基本结构,包括输入层,隐藏层和输出层。然后以简单的2 layer NN为例,详...
  • 吴恩达的Coursera上的深度学习课程,文档包含了所有的课程作业的问题与答案,并且对其中的知识点进行了归档整理,希望给大家带了便利
  • 吴恩达神经网络1-2-2 预测毒性 (Predicting Toxicity) 相关资料 (Related Material) Jupyter Notebook for the article Jupyter Notebook的文章 Drug Discovery with Graph Neural Networks — part 1 图神经网络...
  • 本文介绍了神经网络基础,以逻辑回归引入神经网络,并对梯度求导等相关公式进行了详细的推导。
  • 吴恩达系列课程课件之——神经网络和深度学习第二周 神经网络基础第三周 浅层神经网络第四周 深层神经网络 本程序媛刚开始学习深度学习,记录一下学习资料O(∩_∩)O 第一周主要是介绍课程,课件没有记录下来 第二周 ...
  • 第二周:神经网络的编程基础(Basics of Neural Network programming) 文章目录第二周:神经网络的编程基础(Basics of Neural Network programming)前言正文2.1 二分类(Binary Classification)2.2 逻辑回归 (Logistic...
  • 本章讲述了神经网络的起源与神经元模型,并且描述了前馈型神经网络的构造。 更多内容参考 机器学习&深度学习 在传统的线性回归或者逻辑回归中,如果特征很多,想要手动组合很多有效的特征是不现实的;而且...
  • 第九章神经网络简介非线性假设 非线性分类的例子: 非线性假设,会因为特征量的增多导致二次项数的剧增。 举个例子,在房价预测中,一栋房屋拥有的特征量为10000,那么它的二次项数为100*100/2,大约为5000个 ...
  • 文章目录第三周:浅层神经网络(Shallow neural networks)前言正文3.1 神经网络概述( Neural Network Overview)3.2 神经网络的表示( Neural Network Representation)3.3 计算一个神经网络的输出( Computing a ...
  • 文章目录九、神经网络的学习9.1 代价函数9.2 反向传播算法9.3 理解反向传播9.4 梯度检验9.5 随机初始化9.6 总体回顾9.7 神经网络举例:无人驾驶 九、神经网络的学习 9.1 代价函数 ??? 9.2 反向传播算法 Back ...
  • 在deeplearning.ai深度学习专项课程之后,吴恩达在斯坦福又开了一门学分课,这门课涉及到深度学习的基础知识、神经网络构建,以及如何完成一个成功的机器学习项目。具体将涉及卷积网络,RNNs,LSTM,Adam,Dropout,...
  • 2.2 逻辑回归(Logistic Regression) 在这个视频中,我们会重温逻辑回归学习算法,该算法适用于二分类问题,本节将主要介绍逻辑回归的Hypothesis Function(假设函数)。 这时候我们得到的是一个关于输入x的线性函数...
  • ReLU函数:修正线性单元,是一种人工神经网络中常用的激活函数(activation function),修正指取不小于0的值 一个复杂的神经网络:将如上的独立简单神经元叠加起来 神经网络的一部分神奇之处在于,当你...
  • 神经网络 之前学习了线性回归模型和 logistic 回归模型,现在学习第三个模型——神经网络神经网络是模拟我们大脑神经系统的产物。 神经网络的结构如下所示: 上图是一个 3 层神经网络,由神经元和神经连接组成。...
  • 吴恩达神经网络与机器学习入门指路B站视频链接中文版课后作业及答案在线编程网站 B站视频链接 第一课【神经网络与深度学习】 https://www.bilibili.com/video/BV164411m79z 第二课【改善深层神经网络】 ...
  • ←上一篇 ↓↑ 下一篇→ 3.8 激活函数的导数 回到目录 3.10 直观理解反向传播 神经网络的梯度下降法 (Gradient Descent for Neural Networks) 课程PPT ←上一篇 ↓↑ 下一篇→ 3.8 激活函数的导数 回到目录 3.10 ...
  • 解析:inception网络代替人工选择滤波器大小,甚至可以代替人工决定使用卷积层或是池化层。考虑不同滤波器滤波器大小、以及池化层,给网络添加这些超参数的所有可能的值,把这些输出连接起来,由网络自己学习它需要...
  • 但在进入这门课程之前,学习者应该具备关于深度学习、卷积神经网络的知识,具备一定的 Python 技能和深度学习框架(TensorFlow、Keras、PyTorch)的使用经验,且精通微积分、线性代数、统计学。 课程内容 本次专项...
  • 例如有一个包含个样本的训练集,你很可能习惯于用一个for循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用for循环来遍历整个训练集,所以在这周的课程中你将学会如何处理训练集。...
  • 3.神经网络代价函数 function [J grad] = nnCostFunction(nn_params, ...  input_layer_size, ...  hidden_layer_size, ...  num_labels, ...  X, y, lambda) %NNCOSTFUNCTION Implements the neural ...
  • 向AI转型的程序员都关注了这个号????????????大数据挖掘DT机器学习 公众号:datayx内容简介吴恩达(Andrew Ng)相信大家都不陌生了。2017年8 月 8 日,吴...
  • 吴恩达卷积神经网络——学习笔记(二)1. 边缘检测示例 (Edge Detection Example) 视频课程链接: https://www.bilibili.com/video/BV1FT4y1E74V? 笔记参考链接: ...1. 边缘检测示例 (Edge Detection Example) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,160
精华内容 2,864
关键字:

吴恩达人工神经网络