1 Introduction to Deep Learning

介绍了神经网络的定义,有监督学习,分析了为什么深度学习会崛起

1.1 结构化数据/非结构化数据

结构化数据:有一个确切的数据库,有key-value索引

非结构化数据:音频、图像等。没有确定的结构

1.2 为什么深度学习会兴起

数据规模、算力提升、算法创新

2 Neural Networks Basics

如何把逻辑回归问题当作一个神经网络,如何使用python,如何向量化

2.1 二分类问题

标签0代表不是猫,标签1代表猫

图片信息展开。例如一个图像尺寸为64*64*3(尺寸,RGB),在当前处理时,需要将其展开为一个12288维向量使用。

2.2 逻辑回归

给定x,希望计算的\(\hat y\)为y=1的概率
\[
\hat y = p(y=1|x)
\]
sigmoid函数
\[
\sigma(z)=\frac{1}{1+e^{-z}}
\]
逻辑回归的输出
\[
\hat y=\sigma(w^Tx+b)
\]

2.3 损失函数和代价函数

loss function,损失函数是衡量算法在单个样本上的表现。

cost function,代价函数时衡量算法在所有训练样本上的表现。

逻辑回归的损失函数见式4和代价函数见式5。

loss function:
\[
L(\hat y,y)=-(ylog(\hat y)+(1-y)log(1-\hat y))
\]
cost function:
\[
J(w,b)=\frac{1}{m}\sum\limits_{i = 1}^m{L(\hat y^{(i)},y^{i})}=\frac{1}{m}\sum\limits_{i = 1}^m{-(ylog(\hat y)+(1-y)log(1-\hat y))}
\]

2.4 如何理解逻辑回归的损失函数

2.4.1 单个样本

已知一个样本(x, y)。模型的\(p(y|x)\)是当输入x时,输出y的概率。通俗讲就是预测正确的概率。因为逻辑回归只有0和1两种情况,所以这个概率公式为式6.
\[
p(y|x)=\hat y^y(1-\hat y)^{(1-y)}
\]
对于上面式子的解释:

当\(y=1\)时,\(1-y\)为0,任何数的0次方都为1,所以\(p(y|x)=\hat y。\)

当\(y=0\)时,\(p(x|y)=(1-\hat y)\)

我们希望能够最大化这个概率,由于log是单调递增函数,所以取log之后最大化,也是这个概率的最大化。加上负号就变成损失函数,最小化损失函数。

2.4.2 m个样本

假设m个样本都是相互独立的,那么对于m个样本都预测正确的概率就为单个样本相乘。
\[
p(所有样本预测正确)=\prod ^ m _{i=1} p(y^{(i)}|x^{(i)})
\]
取log之后,并将右边缩放就是m个样本的损失函数了。

2.5 梯度下降法

每个点计算其梯度,向负梯度方向移动,直到收敛。对于逻辑回归更新如式6和式7。
\[
w:=w-\alpha\frac{\partial J(w,b)}{\partial w}
\]

\[
b:=b-\alpha \frac{\partial J(w,b)}{\partial b}
\]

2.6 导数

回顾微积分基础

2.7 计算图

计算图如下图所示。在神经网络中,计算图中绿色表示了前向传播的过程,红色表示了反向传播的过程。使用计算图可以清楚的解释整个计算过程。

反向传播过程,可以认为是个链式求导过程。求导结果如下图。

2.8 梯度下降在逻辑回归中的应用

在逻辑回归中应用梯度下降方法的计算图如下。

整理为公式,推导很简单,自己推过。
\[
\frac{dL(a,y)}{da}=-\frac{y}{a}+\frac{1-y}{1-a}
\]

\[
\frac{dL}{dz}=\frac{dL}{da}\cdot\frac{da}{dz}=a-y
\]

\[
\frac{dL}{dw_1}=\frac{dL}{dz}\cdot\frac{dz}{dw}=x_1\cdot{dz}
\]

\[
\frac{dL}{dw_2}=\frac{dL}{dz}\cdot\frac{dz}{dw}=x_2\cdot{dz}
\]

\[
\frac{dL}{db}=dz
\]

2.9 拥有m个样本的逻辑回归的梯度下降

注意将J、dw、db这些求和,并除以m

2.10 向量化

在拥有m个样本的计算中,可以将数据向量化,不进行显示的循环操作,加速程序速度。因为cpu/gpu可以并行化计算。

x变为一个\(n_x \times m\)的矩阵,z和\(\hat y\)变为Z和A会变为\(1 \times m\)的矩阵

前向传播公式:
\[
Z=w^TX+b
\]

\[
A=\sigma(Z)
\]

反向传播公式:
\[
J(w,b)=\frac{1}{m}\sum{-(YlogA+(1-Y)log(1-A))}
\]

\[
dZ=A-Y
\]

\[
dw=\frac{1}{m} \cdot X \cdot dZ^T
\]

\[
db=\frac{1}{m} \cdot \sum{dZ}
\]

\[
w:=w-a\cdot dw
\]

\[
b:=b-a \cdot db
\]

2.11 python中的广播

在对于元素的加减乘除中,会将小尺寸的矩阵复制为大尺寸,这里叫做广播。

如果两个矩阵的某个维度长度相符,或其中一方的轴长度为1,则会在上面进行广播。

3 Shallow neural networks

介绍什么是神经网络

3.1 神经网络的表示

输入层、隐藏层、输出层

L表示不包括输入层的层数,l表示第l层。输入层为第0层。

\(a^{[l]}\)表示第l层的输出a代表activation激活。

3.2 前向传播

\[
Z^{[l]}=W^{[l]}A^{[l]}+b^{[l]}
\]

\[
A^{[l]}=g(Z^{[l]})
\]

3.3 激活函数

3.3.1 定义

四种激活函数定义如下式。
\[
sigmoid:a=\frac{1}{1+e^{-z}}
\]

\[
tanh:a=\frac{e^z-e^{-z}}{e^z+e^{-z}}
\]

\[
Relu:a=max(0,z)
\]

\[
leaky Relu:a=max(0.01z,z)
\]

四种激活函数如下图。

3.3.2 导数

\[
sigmoid:g(z)'=a(1-a)
\]

\[
tanh:g(z)'=1-(tanh(z))^2
\]

\[
Relu:g(z)'=\left\{ {\begin{array}{*{20}{c}}
0&{z < 0}\\
1&{z \ge 0}
\end{array}} \right.
\]

\[
leaky\ Relu:g(z)'=\left\{ {\begin{array}{*{20}{c}}
0.01&{z < 0}\\
1&{z \ge 0}
\end{array}} \right.
\]

备注:对于relu和leaky relu,在0处的导数未定义,实际使用中归为大于0的情况。

3.3.3 讨论

关于这些函数的结论:

sigmoid:输出层是一个二分类问题时用,其余场合不用

tanh:几乎是和所有场合,因为它可以将输出的平均值大约为0

Relu:最常用的默认函数。相对于sigmoid和tanh,不会出现当数值过大或过小时,梯度很小。

3.3.4为什么使用非线性激活函数

因为使用线性激活函数,那么多层网络可以被简化为一个线性变换。

3.4 神经网络的梯度下降

浅层神经网路进行二分类时的推导。略过了,直接看后面深层的推导吧。

3.5 随机初始化

神经网络权重初始化为0,会造成每一层的每个neuron对应上一层每个元素的权重都相同。既图中W[1]每一行相同,但是每一行的元素并不是相同的。

每行都相同会造成每一层每个neuron的输出都相桶。会造成对称性问题

然而对于逻辑回归,由于只有一个神经元,所以没有这个问题。相当于只有W的其中一行,一行每个元素不是相同的。所以没有问题。

这里我觉得吴恩达老师在第二部分的初始化练习题中给的例子不好。给我造成了一个随机初始化为0将不更新参数的错觉。题目使用了特殊的训练数据造成的,实际上还是会更新参数,但是没法打破对称性问题。具体解释如下。

在这个题目中,神经网络无论怎么更新,参数都为0。由于实验的数据十分特殊,训练集中label=0和lable=1的个数相同,造成在反向传播时计算\(dW^{[3]}=\frac{1}{m}dZ^{[3]}A^{[2]T}=[0]\)。其中\(dZ^{[3]}\)拥有n个正数和n个负数,而且相同。而\(A^{[2]}\)全等于0.5。所以计算出dW全等于0,接下来的更新都等于0。如果数据集不特殊,还是可以更新的,但是就和第一段描述的情况相同了。(最开始还以为relu激活函数造成的,实际并不是)

而对于逻辑回归,不会出现全相同的\(A^{[2]}\),\(A^{[2]}\)将会是X,X不可能全相同,所以全部初始化为0在特殊情况也不会有影响。

4 Deep Neural Networks

4.1 深层神经网络

就是比浅层神经网络有更多的隐藏层。有一些函数,只有非常深的神经网络能学会。

符号定义:L表示层数,\(n^{[l]}\)表示第l层的节点个数,\(a^{[l]}\)表示l层激活后的结果。

符号含义可以看官方的pdf

4.2 前向传播

向量化之后的式子,这里还需要一个显示的循环,从第一层到第L层
\[
Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}
\]

\[
A^{[l]}=g^{[l]}(Z^{[l]})
\]

前向传播会缓存一些内容:Z、

这里元素的维度需要注意,其中
\[
W^{[l]}、dW^{[l]} : n^{[l]} \times n^{[l]}
\]

\[
b^{[l]}、db^{[l]}:n^{[l]}\times 1
\]

\[
Z^{[l]}、A^{[l]}:n^{[l]}\times m
\]

4.3 反向传播

向量化之后的例子,和前向一样,需要一个显示的循环。而且需要用到前向传播缓存的内容。
\[
dZ^{[l]}=dA^{[l]}*g^{[l]}{'}(Z^{[l]})
\]

\[
dW^{[l]}=\frac{1}{m}dZ^{[l]}A^{[l-1]T}
\]

\[
db^{[l]}=\frac{1}{m}np.sum(dZ^{[l]}, axis = 1, keepdims=True)
\]

\[
dA^{[l-1]}=W^{[l]T}dZ^{[l]}
\]

4.4 为什么使用深层表示

4.4.1 深层网络在计算什么

靠前层的在计算简单的内容,靠后的层计算复杂的内容。

4.4.2 为什么用深层网络

在某些情况下,例如x1-xn的异或运算。如果使用深层网络,节点数只有logn。如果使用浅层网络,需要\(2^{n-1}\)个节点。

吴恩达在这里说深度学习其实应该叫多隐层神经网络,名字被炒作了。

4.5 搭建神经网络块

其中的箭头,蓝色的为正向传播,红色的为反向传播,绿色的表示一个训练过程。

4.6 参数和超参数

后面有更仔细的讲解。这里说明一个领域对超参数的直觉不一定适合其他领域。

4.7 神经网络和大脑的关系

神经网络只是一个过度简化的神经元。现在并不能解释清楚一个神经元。这么类比不妥。

Neural Networks and Deep Learning 笔记的更多相关文章

  1. 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week2 Neural Networks Basics课堂笔记

    Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week2 Neural Networks Basics 2.1 ...

  2. 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week1 Introduction to deep learning课堂笔记

    Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week1 Introduction to deep learn ...

  3. Neural Networks and Deep Learning学习笔记ch1 - 神经网络

    近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...

  4. 第四节,Neural Networks and Deep Learning 一书小节(上)

    最近花了半个多月把Mchiael Nielsen所写的Neural Networks and Deep Learning这本书看了一遍,受益匪浅. 该书英文原版地址地址:http://neuralne ...

  5. Neural Networks and Deep Learning

    Neural Networks and Deep Learning This is the first course of the deep learning specialization at Co ...

  6. [C3] Andrew Ng - Neural Networks and Deep Learning

    About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep l ...

  7. 《Neural Networks and Deep Learning》课程笔记

    Lesson 1 Neural Network and Deep Learning 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第一门课程的课程笔记. 参考了其他人的笔记继续归纳 ...

  8. neural network and deep learning笔记(1)

    neural network and deep learning 这本书看了陆陆续续看了好几遍了,但每次都会有不一样的收获. DL领域的paper日新月异.每天都会有非常多新的idea出来,我想.深入 ...

  9. Neural Networks and Deep Learning 课程笔记(第四周)深层神经网络(Deep Neural Networks)

    1. 深层神经网络(Deep L-layer neural network ) 2. 前向传播和反向传播(Forward and backward propagation) 3. 总结 4. 深层网络 ...

随机推荐

  1. 让input表单输入框不记录输入过信息的方法

    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前输入的文本,这样有时会觉得比较方 ...

  2. iOS:学习runtime的理解和心得 (转)

    Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西.最近在学习Runtime,有自己的一些心得,整理如下, 一为 查阅方便 二为 或许能给他人一些启发, 三为 希 ...

  3. [原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. python内置方法补充all

    all(iterable) 版本:该函数在python2.5版本首次出现,适用于2.5以上版本,包括python3,兼容python3版本. 说明:如果iterable的所有元素不为0.''.Fals ...

  5. 动态顺序表(C++实现)

    顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...

  6. hd acm1013

    Problem Description(数根) The digital root of a positive integer is found by summing the digits of the ...

  7. <轻量算法>根据核密度估计检测波峰算法 ---基于有限状态自动机和递归实现

    原创博客,转载请联系博主! 希望我思考问题的思路,也可以给大家一些启发或者反思! 问题背景: 现在我们的手上有一组没有明确规律,但是分布有明显聚簇现象的样本点,如下图所示: 图中数据集是显然是个3维的 ...

  8. poj 1028 Web Navigation 【模拟题】

    题目地址:http://poj.org/problem?id=1028 测试样例: Sample Input VISIT http://acm.ashland.edu/ VISIT http://ac ...

  9. hadoop启动时解决权限问题

    解决以上问题,使用命令:sudo chown -hR jxh-ubuntu /usr/local/hadoop

  10. linux应用之xampp集成环境的安装及配置(centos)

    1.xampp集成环境的下载 在xampp的官网上选择对应系统的版本进行下载,官网地址:https://www.apachefriends.org/zh_cn/index.html #wget htt ...