最近要做关于深度学习的调研报告,看了李宏毅的300页PPT,学习笔记如下:
LECTURE 1 Introduction
深度学习的介绍
深度学习实质上就是寻找一个函数模型,这个寻找的过程分为三个步骤: 定义模型(神经网络), 模型性能, 挑选最佳模型。
神经网络
深度学习的模型实质上就是一个神经网络,其中有许多神经元组成
神经元
神经网络的最小单位是神经元
图中所示的符号含义为:
w——权值
b——偏离值
σ( )——激活函数
全连接前馈网络
全连接前馈网络是最简单的人工神经网络,是最常用的模型之一。
全连接: 输出是上一层所有输出的加权和处理的结果
前馈:各层之间没有反馈
输出层
由于不同属性对应的值大小差异会很悬殊,直接处理可能会导致结果偏离真实方向。因此我们需要将 softmax 层作为输出层,来对数据进行归一化。
模型性能
训练集
为了使初始模型经过训练后成为一个能够满足我们要求的模型,我们需要准备一个训练集,这个训练集中包括输入的数据啊、图片啊、音频啊什么的,还包括一个与之分别相对应的我们所期待的输出结果。
学习目标
我们训练模型的目的就是为了在输入数据后,所期待输出的对应的y值最大。例如,在识别手写数字时,我们输入一个手写数字“1”的图片,那么输出为“1”所对应的y值是所有y值中最大的。
误差
当然,如果手写数字太潦草了,别说模型了,就连我们自己也很难识别出来,因此我们对真实值和测量值之间的差距进行量度。
总体误差
把所有输入经过模型后输出的误差相加,就得到了总体误差。总体误差应该越小越好,我们需要找的最优模型应该具有最小的误差,而这个模型之间误差的不同的原因在于模型中的参数不同。
挑选最优模型
如何寻找最优模型
找最优模型等效于得出一系列模型参数(weights & b)使得总体误差最小化。
梯度下降
为了找到使得总体误差最小化的模型,我们可以利用梯度下降算法进行此操作。以下是梯度下降算法操作的步骤。
step1:
首先假设一个模型,具有模型参数{w1, w2, …, b1, b2, …},这个模型的总体误差为L,梯度下降算法将对单个参数w进行处理。
step2:
给w定义一个初始值,这个初始值可以是个随机值,也可以是一个RBM值。但要注意梯度下降不保证全局最小值,不同的起点值会到达不同的最小值点
step3:
对总体误差L求w的偏导,如果偏导值为正数,则减小w,如果偏导值为复数,则增大w,因此我们定义一个公式,以便求解下一个w值。
其中η为学习率,是一个正数。重复此操作,直到偏导值足够小。
step4:
对所有的模型参数进行梯度下降的处理后可以得到一个最终坐标(w1, w2, …, b1, b3,…),如下图所示,就能得到一个最佳模型。
WHY DEEP?
参数越多,模型性能越好
“Hello World”for Deep Learning
本节简单教大家如何使用Keras进行深度学习,使训练的模型具有识别手写数字的能力。
"""
Keras:是一个基于Python的深度学习库
"""
import Keras.
#step1:define a set of function
model = Sequential()
model.add(Dense( input_dim = 28 * 28,
output_dim = 500))
model.add( Activation('sigmoid'))
model.add( Dense( output_dim = 500))
model.add( Activation('sigmoid'))
model.add( Dense(output_dim = 10))
model.add( Activation('softmax'))
#step2 goodness of function
#step3.1 configuration
model.compile(loss='mse',
optimizer=SGD(lr=0.1),
metrics=['accuracy'])
#step3.2 find the optimal network parameters
model.fit(x_train, y_train, batch_size=100, nb_epoch=20)
关于Keras的文档:https://keras.io/