目录
相关资料
开源内容:https://linklearner.com/datawhale-homepage/index.html#/learn/detail/13
开源内容:https://github.com/datawhalechina/leeml-notes
开源内容:https://gitee.com/datawhalechina/leeml-notes
视频地址:https://www.bilibili.com/video/BV1Ht411g7Ef
官方地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses.html
1、深度学习的三个步骤
1.1、神经网络(Neural Network)
1.1.1、概念
神经网络(Neural network)里面的节点,类似我们的神经元。
神经网络:不同的连接方式会产生不同的结构(structure)。
神经网络里面有很多逻辑回归函数,其中每个逻辑回归都有自己的权重和自己的偏差,这些权重和偏差就是可以优化的参数。
1.1.2、全连接前馈神经网络(Fully Connect Feed forwardNetwork)
前馈or前向(feedforward):输入信号进入网络后,信号流动是单向的,无反馈流动。即信号从前一层流向后一层,一直到输出层。
神经网络如果权重和偏差都知道的话就可以看成一个函数。这个函数输入是一个向量(输入层维度),对应的输出也是一个向量(输出层维度)。不论是做回归模型(linear model)还是逻辑回归(logistics regression)都是定义了一个函数集(function set)。
1.1.3、隐藏层
结构:
- 输入层(Input Layer):1层
- 隐藏层(Hidden Layer):N层
- 输出层(Output Layer):1层
- 全连接:layer之间两两都有连接,所以叫做Fully Connect;
- 前馈or前向:传递的方向是由后往前传,所以叫做Feedforward。
通过隐藏层进行特征转换:
使用隐藏层进行特征提取,替代原来的特征工程。最后一个隐藏层输出的就是一组新的处理过的特征;对于输出层,其实是把前面的隐藏层的输出(最好的特征)当做输入,然后通过一个多分类器(可以是softmax函数)得到最后的输出y。
Example:Minist
输入:一个16*16=256维的向量,每个pixel对应一个dimension,有颜色用(ink)用1表示,没有颜色(no ink)用0表示
输出:10个维度,每个维度代表一个数字的置信度。
Tips:
- 对于有些机器学习相关的问题,一般用特征工程来提取特征。但是对于深度学习,我们只需要设计神经网络模型来进行就可以了。对于语音识别和影像识别,深度学习是个好的方法,因为特征工程提取特征并不容易。
- 有很多设计方法可以让机器自动找到神经网络的结构的,比如进化人工神经网络(Evolutionary Artificial Neural
Networks)但是这些方法并不是很普及 。 - 可以自己设计网络结构,例如 CNN卷积神经网络(Convolutional Neural Network)
2、模型评估(Goodness of function)
2.1、单个数据损失
对于神经网络来说,采用交叉熵(cross entropy)函数来对
y
y
y和
y
^
\hat{y}
y^的损失进行计算,接下来就是调整优化参数,让交叉熵越小越好。
2.2、模型数据总体损失
对于总损失,计算整体所有训练数据的损失,然后把所有的训练数据的损失都加起来,得到一个总体损失L。接下来就是在function set里面找到一组函数能最小化这个总体损失L,即是找一组神经网络的参数
θ
\theta
θ,来最小化总体损失L。
3、选择最优函数(Pick best function)
使用梯度下降找到最优的函数和最好的一组参数,计算偏微分,并不断自身迭代优化参数。
在神经网络中计算损失最好的方法就是反向传播,可以用很多框架来进行计算损失,比如说TensorFlow,Pytorch等。
深度学习框架,核心是对于反向传播的计算。
4、思考
- 理论上,隐藏层越多越好。我认为实际可能不是。一方面是会存在过拟合问题,另一方面,例如ResNet,隐藏层过多,如果不采用残差结构,可能无法训练计算。
- 对于任何一个连续的函数,都可以用足够多的隐藏层来表示。