小土刀4.0

【CS230-DL】00 课程概览

约 5 分钟

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 可以加速

写些什么

对于公开课的系列,以学习笔记为主,主要会写:

  1. 核心概念
  2. 更新部分过时的代码和描述
  3. 总结一些我个人学习过程中觉得有一些理解门槛的要点,帮助大家理解
  4. 在 Github 公开源码,包括作业部分

一些写作习惯:

  1. 对于专有名词,比如 Graph/Session 之类的,通通不翻译,请不要埋怨我中文夹英文
  2. 文章中贴出的代码很大概率是节选,但是会把完整的源代码放在 github 中,如果需要,自取
  3. 不钻牛角尖,如果是明确不推荐的写法,我会直接忽略(比如不推荐多个 Graph,非要用多个,不好意思,自己折腾谢谢)
  4. 静态博客不带评论,交流可以通过微博、邮件等等途径
  5. 非常感谢勘误,会在原文中注明,如果有不想列出名字的同学,也请顺带在勘误中告知
  6. 这个列表会随时根据我的心情增加,如果不喜欢,可以直接关掉页面,不需要告诉我

希望能在自己学习的过程中也帮助大家

课程大纲

  1. 神经网络和深度学习
  2. 优化深层神经网络:超参调试、正则化及优化
  3. 机器学习项目工程化
  4. 卷积神经网络
  5. 序列模型

附录:

大师的话

  • Geoffery Hinton: 开始锻炼直觉时要多阅读,然后相信直觉,自己动手,不要担心别人有反对意见。
  • Yoshua Bengio: 不要畏惧数学,只管发展直觉认识。
  • Andrej Karpathy: 你必须接触到最底层,知道一切程序背后的原理,不要随便抽象化

深度学习符号规范

在接下来的课程中,我们的公式部分遵从下面的规范。其中的通用规范为

  • 上标 (i)(i) 会用来表示第 i 个训练样本
  • 上标 [l][l] 会用来表示的 l 层

Size

  • mm - 数据集的样本数量
  • nxn_x - 输入大小
  • nyn_y - 输出大小(或类别数量)
  • nh[l]n_h^{[l]} - 第 l 层的神经元数量
  • 在循环中,也可以把第一层和最后一层这样记:nx=nh[0]n_x=n_h^{[0]},ny=nh[number of layers+1]n_y=n_h^{[number \ of\ layers+1]}
  • LL - 网络中的层数

Objects

  • X∈Rnx×mX \in \mathbb{R}^{n_x \times m} - 输入矩阵
  • x(i)∈Rnxx^{(i)} \in \mathbb{R}^{n_x} - 第 i 个样本,通过一个 column vector 来表达(列)
  • Y∈Rny×mY \in \mathbb{R}^{n_y\times m} - 标记 label 矩阵
  • y(i)∈Rnyy^{(i)} \in \mathbb{R}^{n_y} - 第 i 个样本的标记 label
  • W[l]∈Rnumber of units in next layer × number of units in previous layerW^{[l]} \in \mathbb{R}^{number\ of\ units\ in\ next\ layer \ \times \ number\ of\ units\ in\ previous\ layer} - 权重矩阵,l 表示对应哪层
  • b[l]∈Rnumber of units in next layerb^{[l]} \in \mathbb{R}^{number\ of\ units\ in\ next\ layer} - 第 l 层的 bias vector
  • y^∈Rny\hat{y} \in \mathbb{R}^{n_y} - 网络的输出向量,也可以记为 a[L]a^{[L]},其中 L 是网络的层数

前向传播

a=g[l](Wxx(i)+b1)=g[l](z1)a = g^{[l]}(W_xx^{(i)} +b_1)=g^{[l]}(z_1)

这里的 g[l]g^{[l]} 表示的是第 l 层的激活函数

y^(i)=softmax(Whh+b2)\hat{y}^{(i)}=softmax(W_hh+b_2)

  • 通用激活函数公式 aj[i]=g[l](∑kwjk[l]ak[l−1]+bj[l])=g[l](zj[l])a_j^{[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(x, W, b, y) 或 J(y^,y)J(\hat{y},y)

损失函数的例子

  • JCE(y^,y)=−∑i=0my(i)log y^(i)J_{CE}(\hat{y},y)=-\sum_{i=0}^m y^{(i)}log\ \hat{y}^{(i)}
  • J1(y^,y)=∑i=0m∣y(i)−y^(i)∣J_1(\hat{y},y)=\sum_{i=0}^m|y^{(i)}-\hat{y}^{(i)}|

网络展示

  • 节点表示输入、激活函数或输出
  • 边表示权重或偏置

相关资源