CS230 这门课的大名想必大家都听过,就是吴恩达老师推出的深度学习课程。我们会学习 CNN/RNN/LSTM 等深度学习常用的网络架构,以及如何去完成一整个深度学习项目。这个系列就是我的学习笔记,在原有课程的基础上,我会加入自己的理解,并把对应的代码同步到 Github 上。
更新历史
- 2019.10.11: 完成初稿
环境配置
课程提供的资料比较旧,这里就另起炉灶,原文
基本环境(基于 Mac 配置)
- Python 3.6.8
- Tensorflow 1.14
- scipy 1.2.0
- pandas 0.24.2
- numpy 1.16.4
- matplotlib 3.1.0
采用 virtualenv 配置虚拟环境,命令为 virtualenv -p /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 --no-site-package py36
,这里具体的 python 路径可以根据不同的安装方式来自行决定,如果是用 brew 安装的话,位置会不一样。
注:pip 时添加 -i https://pypi.tuna.tsinghua.edu.cn/simple
可以加速
写些什么
对于公开课的系列,以学习笔记为主,主要会写:
- 核心概念
- 更新部分过时的代码和描述
- 总结一些我个人学习过程中觉得有一些理解门槛的要点,帮助大家理解
- 在 Github 公开源码,包括作业部分
一些写作习惯:
- 对于专有名词,比如 Graph/Session 之类的,通通不翻译,请不要埋怨我中文夹英文
- 文章中贴出的代码很大概率是节选,但是会把完整的源代码放在 github 中,如果需要,自取
- 不钻牛角尖,如果是明确不推荐的写法,我会直接忽略(比如不推荐多个 Graph,非要用多个,不好意思,自己折腾谢谢)
- 静态博客不带评论,交流可以通过微博、邮件等等途径
- 非常感谢勘误,会在原文中注明,如果有不想列出名字的同学,也请顺带在勘误中告知
- 这个列表会随时根据我的心情增加,如果不喜欢,可以直接关掉页面,不需要告诉我
希望能在自己学习的过程中也帮助大家
课程大纲
- 神经网络和深度学习
- 优化深层神经网络:超参调试、正则化及优化
- 机器学习项目工程化
- 卷积神经网络
- 序列模型
附录:
大师的话
- Geoffery Hinton: 开始锻炼直觉时要多阅读,然后相信直觉,自己动手,不要担心别人有反对意见。
- Yoshua Bengio: 不要畏惧数学,只管发展直觉认识。
- Andrej Karpathy: 你必须接触到最底层,知道一切程序背后的原理,不要随便抽象化
深度学习符号规范
在接下来的课程中,我们的公式部分遵从下面的规范。其中的通用规范为
- 上标 $(i)$ 会用来表示第 i 个训练样本
- 上标 $[l]$ 会用来表示的 l 层
Size
- $m$ - 数据集的样本数量
- $n_x$ - 输入大小
- $n_y$ - 输出大小(或类别数量)
- $n_h^{[l]}$ - 第 l 层的神经元数量
- 在循环中,也可以把第一层和最后一层这样记:$n_x=n_h^{[0]}$,$n_y=n_h^{[number \ of\ layers+1]}$
- $L$ - 网络中的层数
Objects
- $X \in \mathbb{R}^{n_x \times m}$ - 输入矩阵
- $x^{(i)} \in \mathbb{R}^{n_x}$ - 第 i 个样本,通过一个 column vector 来表达(列)
- $Y \in \mathbb{R}^{n_y\times m}$ - 标记 label 矩阵
- $y^{(i)} \in \mathbb{R}^{n_y}$ - 第 i 个样本的标记 label
- $W^{[l]} \in \mathbb{R}^{number\ of\ units\ in\ next\ layer \ \times \ number\ of\ units\ in\ previous\ layer}$ - 权重矩阵,l 表示对应哪层
- $b^{[l]} \in \mathbb{R}^{number\ of\ units\ in\ next\ layer}$ - 第 l 层的 bias vector
- $\hat{y} \in \mathbb{R}^{n_y}$ - 网络的输出向量,也可以记为 $a^{[L]}$,其中 L 是网络的层数
前向传播
这里的 $g^{[l]}$ 表示的是第 l 层的激活函数
- 通用激活函数公式 $aj^{[i]}=g^{[l]}(\sum_k w{jk}^{[l]}a_k^{[l-1]}+b_j^{[l]})=g^{[l]}(z_j^{[l]})$
- 损失函数 $J(x, W, b, y)$ 或 $J(\hat{y},y)$
损失函数的例子
- $J{CE}(\hat{y},y)=-\sum{i=0}^m y^{(i)}log\ \hat{y}^{(i)}$
- $J1(\hat{y},y)=\sum{i=0}^m|y^{(i)}-\hat{y}^{(i)}|$
网络展示
- 节点表示输入、激活函数或输出
- 边表示权重或偏置