Deep Learning笔记: Course 1, Week 3

Shallow Neural Network

本周课程涉及到的知识点:

  • Shallow neural network 的基本结构
  • Activation function 的选择和计算
  • Gradient descent 和 Backward propagation

Shallow neural network 的基本结构

Shallow neural network 可以看做是前一节课介绍的 logistic regression 的拓展,也即是只有一层的神经网络。 它的结构如下所示:

Shallow Neural Network结构

最左边的是输入层,最右边的是输出层,中间部分是隐藏层。可以看到和 logistic regression 不同的是在隐藏层我们定义了多个 neuron, 每个都会执行 Z[1] = W[1] * X + b[1] 以及 a[1] = g(Z[1]) 的操作,这里的 g(*) 被称为 activation function,我们下面会讨论这个 function 的选择。最后我们对 a[1] 进行类似的线性变换然后通过sigmoid function得到最后的输出。 可以看到 Shallow Neural Network 的计算套路和 logistic regression 是基本一样的:

  1. 定义神经网络的结构 ( 例如 隐藏层 neuron 的个数).
  2. 定义模型参数,注意我们有 W1, W2, b1, b2 四个参数
  3. 循环:
    - Forward propagation 计算输出
    - 计算Loss 和 cost function的值
    - Backward propagation 计算梯度
    - Gradient descent 优化参数

假定现在我们要构建一个shallow neural network. 输入层大小(neuron 个数)是 n_x, 中间层大小是 n_h, 输出层大小是 n_y, 下面我们来走一遍整个流程。

定义模型参数

我们需要如下定义模型参数:

-  W1 = np.random.randn (n_h, n_x) * 0.01
-  W2 = np.random.randn (n_y, n_h) * 0.01
-  b1= np.zeros ((n_h, 1)) 
-  b2= np.zeros ((n_y, 1)) 

关于这个定义,两点需要注意:

  • 为什么我们不直接把 W1W2 定义为全0矩阵?
  • 为什么要把 W1W2 乘以0.01 ?

关于第一点,课上的讲解是如果 W1W2 是全0的话,那么隐藏层的每个neuron都会给出同样的计算结果(fail to break symmetric),这样导致神经网络跟只有一个neuron没什么区别。然而经过我的计算发现后果其实更加严重 - 如果 W1W2 被初始化为 0, 经过一轮 forward propagation 和 backward propagation 以后 W1W2 依然是 0, 也就是完全没有更新参数。

补充说明:对于logistic regression, 把初始 W 设置为全 0 向量则不会有问题。这是因为经过计算可以发现一轮 forward propagation 和 backward propagation 以后 W 已经被更新成非 0 向量了。

关于第二点,反过来想,如果 W1W2 很大,那么会造成计算得到的 Z 很大,这样会导致经过激活函数计算出来的 a 值非常接近于1或者0。 这样会有可能导致最后的结果 log(a) 以后趋向于无穷大 - 这样会显著的拖慢收敛速度。因此一般来说我们会把 W1W2 的初始值设置的小一点。

Activation function 的选择

一般来说在隐藏层我们会选择 tanh 或者 ReLU (或者 Leaky ReLU) 函数, 在输出层则会选择 sigmoid 函数。 这是一个典型的nobody knows why it just works的例子。虽然有理论说 tanh 的均值为0,因此效果较好,然而这无法解释为何 ReLU 激活函数的性能也非常不错(均值显然不为0)。

这4种函数的图形如下所示(左下为ReLu, 右下为 Leaky ReLu):

Activation Function

值得考虑的是,为何我们需要这样一个激活函数?

答案很显然,如果去掉activation function, 那么可以发现输出 Y 就完全是输入 X 的线性变换了, 这样我们就无法完成一些非线性划分的复杂工作了。

最后我们列一下四种不同激活函数的导数,这个在计算反向传播的时候会用到。

Activation Function Form Derivatives
sigmoid g(z) = 1 / (1 + exp(-z)) g'(z) = g(z) (1 - g(z))
tanh g(z) = exp(z) - exp(-z) / (exp(z) + exp(-z)) g'(z) = (1 - g(z))^2
ReLU max (0, z) 0 if z < 0, 1 if z >= 1
Leaky ReLU max(0.01z, 1) 0.01 if z < 0, 1 if z >= 1

Forward propagation 计算输出

假设我们隐藏层激活函数采用tanh function, 直接给出公式

[图片上传失败...(image-9c7983-1511717394092)]

[图片上传失败...(image-91df7e-1511717394092)])

[图片上传失败...(image-bb4ea8-1511717394092)]

[图片上传失败...(image-64301a-1511717394092)])

看似很复杂,其实很简单。对每层依次计算线性变换结果 Z[L] 和 激活函数后的结果 a[L] 即可。 需要注意的只是各个矩阵向量的维度。设输入 X 共有 m 个training data, 每层的neuron个数为 n(L), 那么各个矩阵向量的维度为:

  • X: n_x * m
  • W[L]: n(L) * n(L-1)
  • b[L]: n(L) * 1
  • Z[L], A[L]: n(L-1) * m

Backward propagation 计算梯度

同样直接给出公式(递推一下其实也不难):

Backward propagation

需要注意的是在计算反向传播梯度的时候,我们用到了当前层(以及前一层)的输出。例如在计算 dZ[2] 的时候我们需要用到 A[2], 而在计算 dW[2] 的时候直接用到了 A[1] 并且间接用到了 A[2]。因此通常的做法是把每一层的输出放到cache里,以方便计算梯度的时候直接调用。

Gradient descent 优化参数

没有什么可说的,根据计算出来的梯度挨个更新每个参数即可。

总结

这一课基本是个从logistic regression 到 deep neural network的过渡。重点:

  • 随机化初始参数的重要性
  • 非线性activation function的重要性
  • 如何计算正向传播和反向梯度(大概记住原理即可)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • Deep Neural Network 本周课程涉及到的知识点有: Deep neural network 的架构...
    帆_2065阅读 235评论 0 0
  • Logistic Regression as Neural Network 本周课程涉及到的知识点: Logist...
    帆_2065阅读 283评论 0 0
  • 猫猫日常的穿衣搭配,自己画下来,觉得很有意思,来看看吧!
    小猫猫大人阅读 223评论 0 2
  • 文/贱人白 天空湛蓝 楼下的绿树蓝了 路上的行人蓝了 燥热的大地也蓝了 天空在这春暖花开的日子 为何你如此忧伤 把...
    她死了阅读 164评论 0 1
  • 刚刚做了个梦,又梦到了去天堂的亲人了,梦醒了,感伤后突然又有些感慨,过去,现在,未来,每个人都只能陪你走一段路,迟...
    星空中最亮的星阅读 540评论 0 1