0%

【CS230-DL】00 课程概览

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 个训练样本
  • 上标 $[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)}|$

网络展示

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

相关资源