笔记 | 一天搞懂深度学习

一天搞懂深度学习是台湾大学李宏毅教授写的300页左右的PPT,是深度学习入门不错的材料,可以快速的了解深度学习的主要术语、思想、应用、趋势等。

主要对里面的重点内容进行记录。


Lecture 1: Introduction of Deep Learning

深度学习的3个步骤

  1. Network Structure
    一系列函数
  2. Learning Target
    什么样的算好?优化目标是什么?
  3. Learn!
    选出来最好的

神经网络

类似于人类大脑的神经元


一个神经元(Neuron)

如果输入是k维的,对应每一维的输入都有相应的权重weights,加上bias后,再经过激活函数,得到输出的结果。

上面是一个neuron的图示,如果把不同的neuron进行组合,或者说把某些neuron的输出作为其他neuron的输入,就得到了不同的神经网络。


激活函数

最基本的例子的是Sigmoid函数,在机器学习LR模型中也用到。还有比较常用的是ReLU,在Lecture 2中有进一步介绍。

深度学习的Deep

Hidden Layers 隐层
Fully Connect FeedForward Network 全连接前馈网络

深度学习的Deep就在于有多个hidden layers。


深度大概到什么程度呢?

  • AlexNet (2012):8
  • VGG (2014):19
  • GoogleNet (2014):22
  • Residual Net (2015):152(Ultra Deep Network),跟台北101大厦有的一拼

Output Layer

输出层是为了做选择的,一般是softmax layer

softmax怎么理解呢?可以简单概述为:雨露均沾+归一化。理论上只要将输出的结果取max就可以了,但是soft软在哪呢?对于不同的输出计算了一个概率,且这个概率和为1,计算方式如图所示:

softmax

Learning Target: min. loss

学习的目标就是最小化所有样本的loss,一般使用均方误差或者是交叉熵。

最小化总loss -> 找到一组最好的function达到这个目标 -> 找到functions最好的参数达到这个目标

如何找到最好的参数呢?Learn!

穷举是一种方法,但是参数太多,穷举的情况呈指数级,不可行。所以一般采用梯度下降法,导数的正负决定了移动的方向,导数的绝对值*学习率决定了移动的大小。经过迭代直到导数很小。

梯度下降法存在的问题就是没法保证全局最优,不同的初始点(初始选择可以random, pre-train, RBM)可能会得到不同的结果(局部最优)。

梯度下降

神经网络计算梯度的算法是反向传播算法Backpropagation,简称BP。现在有很多的toolkits,可以不用纠结具体如何处理导数。


BP

Lecture 2: Tips for Training Deep Neural Network

Keras

Keras是基于TensorFlow或者Theano的高级神经网络API,更容易学习和使用,而且保持了一定的灵活性。
Keras (κέρας) 在希腊语中意为 号角 。Documentation / 中文文档

Keras十分的简单易用,如简单的Sequential顺序模型,可以参考快速开始:30 秒上手 Keras

from keras.models import Sequential
model = Sequential()

from keras.layers import Dense
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5, batch_size=32)

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

classes = model.predict(x_test, batch_size=128)

可以设置激活函数、输入输出的维度、loss、学习率等。

如果想用GPU来加速训练,有如下两种方式:

Way 1
    THEANO_FLAGS=device=gpu0 python YourCode.py
Way 2 (in your code) 
    import os
    os.environ["THEANO_FLAGS"] = "device=cpu"

Good results on training/testing data?

在训练网络的时候,不仅要看结果在测试集上表现如何,也要看在训练集上如何,不同的情况有不同的解决方式。不要总是责怪过拟合。如下面的例子,不能只看右图就判定56-layer的过拟合了,要看在训练集上的表现,属于对56-layer 的网络训练得还不够好,可能落入了局部最优。


Training set表现不好

  1. 选择合适的Loss function:使用Cross Entropy效果要优于Mean Square Error
  2. Mini-batch: 每次训练使用少量数据而不是全量数据效率更高
  3. Activation Function:使用ReLU替代Sigmoid可以解决梯度消失的问题,可以训练更深的神经网络。还有其他变形。
  4. Adaptive Learning Rate:Adagrad可以随着迭代不断自我调整,提高学习效率。平稳,学习率↑
  5. Momentum: 可以一定程度上避免陷入局部最低点的问题,就好像物理世界中给球增加一个动力,可以冲过局部最低点。

深度学习最常用的算法:Adam优化算法

ReLU

ReLU变形

Maxout
Adagrad
Momentum

Test set表现不好 (overfitting)

  1. Early Stopping:使用cross validation的方式,不断对validation data进行检验,一旦发现预测精度下降则停止。用test set提前终止,防止overfitting。
  2. Weight Decay:参数正则化的一种方式,无用的权重萎缩->0。
  3. Dropout:在每次更新参数之前,随机丢掉p%的输入。但是要注意,在训练集上dropout,相当于改变了网络(thinner),不同的dropout得到的不同的网络,是一种ensemble。在测试集上所有的权重要乘以(1-p)%
  4. Network Structure:如CNN等
Early stopping

Dropout

Lecture 3: Variants of Neural Network

CNN (Convolutional Neural Network)

一般用于图像,核心的想法在于一些物体的特征往往可以提取出来,并且可能出现在图片的任何位置,而且通过卷积池化可以大大减少输入数据,加快训练效率。

  • 为什么要卷积?
    一些模式(如鸟的嘴)的大小远远小于整个图片;一些相同的模式(还是如鸟的嘴)可能出现在不同的区域上。
    如果要是对每一个地方都查看,太冗余。只需要一个neuron看有没有嘴就行了。
  • 为什么要max pooling
    对像素下采样,并不会改变物体,可以让图片大小更小,参数也就更少。
  • Flatten
    把不同的位置的值flatten看作一个多维的输入。

RNN (Recurrent Neural Network)

有记忆的神经网络,将hidden layer的数据存储下来,然后作为输入给下一个网络学习。这种网络的想法可以解决自然语言中前后词语是存在关联性的。


RNN

RNN

1-of-N encoding

其实就是one-hot encoding,如果有一个100...00大小的词典,那么每一个单词都要用一个100..00维的向量表示,只有一位为1,其他位均为0。
区别:"1-of-N" vs "1-of-N-1"

word hashing

26个字母,如果每3个字母一组,共有26^3种组合,可以用对应组合的出现情况来表示单词。

Unfortunately

RNN-based network is not always easy to learn.
经常Total loss是震荡的。一般有以下helpful techniques

  • Advance momentum method
    Nesterov’s Accelerated Gradient (NAG)
  • LSTM (Long Short Term Memory)
  • GRU (Gated Recurrent Unit)
    Simplified LSTM

Lecture 4: Next Wave

  • Supervised Learning
    - Ultra Deep Network
    - Attention Model
  • Reinforcement Learning
  • Unsupervised Learning
    - Image: Realizing what the World Looks Like
    - Text: Understanding the Meaning of Words
    - Audio: Learning human language without supervision

参考资料

  1. 台大PPT:一天搞懂深度学习
  2. 深度学习导论 - 读李宏毅《1天搞懂深度学习》
  3. “一天搞懂深度学习”笔记
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容