神经网络与深度学习
神经网络与深度学习[*]第 1 章 绪论
[*]第 2 章 机器学习概述
[*]第 3 章 线性模型
[*]第 4 章 前馈神经网络
[*]第 5 章 卷积神经网络
[*]第 6 章 循环神经网络
马上期末考试了,就用这篇博客充当一下复习记录吧。一些部分可能有误,还请各位大佬批评指正。
第 1 章 绪论
[*]理解神经网络、深度学习与人工智能的之间的关系;
[*]掌握机器学习与深度学习的步骤;
有关神经网络、深度学习与人工智能的关系
https://img-blog.csdnimg.cn/8b025b6a7201481c8911ff0379efeaa6.png
链接: 图片博客来源
理解:深度学习是人工智能的一个子集合,而神经网络和深度学习又有交集。
那么,为什么神经网络和深度学习不是相互包含的关系呢?
神经网络中除了深度学习还有什么?
深度学习中除了神经网络还有什么?
问题:深度学习中除了神经网络还有什么?
深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型). 但是,由于神经网络模型可以比较容易地解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型参考
又或者周志华老师的深度森林,其实也是深度学习但却不是神经网络。
问题:神经网络中除了深度学习还有什么?
个人理解,深度学习是一些比较深的模型。而一些比较简单的神经网络(如单层感知机或者2层神经网络等)这些比较“浅”的模型虽然是神经网络但却不是深度学习。
因此神经网络与深度学习并不是相互包含的关系,深度学习与神经网络彼此有交集却并不等价也不存在包含关系。
问题:机器学习的步骤
首先,什么是机器学习?
机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法。
那么机器学习的步骤可以表示如下:
https://img-blog.csdnimg.cn/e1964788eec14bc2ba1c287acac1c97b.png
数据预处理:进行如缺失值处理、数据格式统一、数据归一化等操作。
特征提取:根据某些方法提取出有用的特征,提取出有用的特征,去除多余的或者起到干扰作用的特征,又或者在图像分类中提取边缘、在文本分类中去除停用词等。
特征转换:对提取出来的特征进行转换,如降维(PCA或LDA等方法)或升维。使得数据具有更好的表现力。
预测:选定一个合适的模型,学习一个函数(利用优化方法将损失函数降到最小)并在测试集上进行预测。
问题:深度学习的步骤
https://img-blog.csdnimg.cn/89c74d88716b41d19c7d76bf9ec7c640.png
通过多层的特征转换,把原始数据变成更高层次、更抽象的表示.这些学习到的表示可以替代人工设计的特征,从而避免“特征工程”。数据预处理去哪了?
第 2 章 机器学习概述
[*]掌握什么是机器学习;常见的机器学习类型;
[*]掌握机器学习四要素;
[*]理解机器学习的几个关键点。
问题:什么是机器学习
根据维基百科对机器学习的解释:
机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法.
问题:常见的机器学习类型
常见的机器学习有有监督学习、无监督学习、半监督学习、强化学习等。
有监督学习:对每一个样本都有“标准答案”,机器学习根据“标准答案”利用损失函数计算损失,通过对损失函数的最小化达到模型学习的目的。如分类、回归等问题。
无监督学习:每一个样本都没有“标准答案”,利用这些数据解决模式识别中的问题(如类别划分)。常见的无监督学习有PCA、聚类、核密度估计等。
半监督学习:部分样本有“标准答案”部分样本没有。利用这些数据训练一个模型来解决问题(分类、回归等)。
问题:机器学习四要素
[*]数据
[*]模型:实现任务的数学模型,如决策树、支持向量机,k-means等模型。
[*]学习准则:衡量模型的好坏,也是模型的学习目标,如在有监督学习中学习准则即为损失函数,如分类中的交叉熵损失或者回归问题中的MSE损失。
[*]优化算法:能够是学习准则的到目标的方法,如梯度下降法等方法。
以上四点为机器学习的四要素。
理解机器学习的几个关键点
待定
第 3 章 线性模型
[*]掌握交叉熵损失
[*]掌握MSE 损失
交叉熵和MSE损失的异同:
异:交叉熵是用于分类问题的,而MSE是用于回归问题的。
同:二者都是损失函数,都通过使损失函数最小从而找到最优模型的参数。
交叉熵损失
推导待定
公式:
二分类
在二分类的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为 p p p 和 1 − p 1-p 1−p ,此时表达式为( log \log log 以 e e e为底) :
L = 1 N ∑ i L i = 1 N ∑ i − [ y i ⋅ log ( p i ) + ( 1 − y i ) ⋅ log ( 1 − p i ) ] L=\frac{1}{N} \sum_{i} L_{i}=\frac{1}{N} \sum_{i}-\left L=N1i∑Li=N1i∑−
其中:
− y i − -y_{i}- −yi− 表示样本 i i i 的label,正类为 1 ,负类为 0
− p i − -p_{i}- −pi− 表示样本 i i i 预测为正类的概率
如何直观理解:
损失函数的作用是什么?
是衡量模型表现好坏的指标,也是模型学习的目标,因此当模型表现较为好时,此时应该有较小的 L o s s Loss Loss。在上述公式中。
L i L_i Li为单个样本的损失,根据上述公式 L i = − [ y i ⋅ log ( p i ) + ( 1 − y i ) ⋅ log ( 1 − p i ) ] L_i = -\left Li=−
那么,当样本的真实值为1也就是 y i = 1 y_i = 1 yi=1时,此时 L i = − [ y i ⋅ log ( p i ) ] = − log ( p i ) L_i = -\left = -\log \left(p_{i}\right) Li=−=−log(pi)那么根据 l o g log log函数, p i p_i pi越接近于1,也就是模型认为该样本为正类的概率越大(正确的)此时 L i L_i Li越小;而若 p i p_i pi越接近于0,也就是模型认为该样本为负类的概率越大(错误的),此时 L i L_i Li越大。
当样本的真实值为0也就是 y i = 0 y_i = 0 yi=0时,此时 L i = − [ ( 1 − y i ) ⋅ log ( 1 − p i ) ] = − log ( 1 − p i ) L_i = -\left[(1-y_{i}) \cdot \log \left(1-p_{i}\right)\right] = -\log \left(1-p_{i}\right) Li=−[(1−yi)⋅log(1−pi)]=−log(1−pi)那么根据 l o g log log函数, p i p_i pi越接近于1,也就是模型认为该样本为正类的概率越大(错误的)此时 L i L_i Li越大;而若 p i p_i pi越接近于0,也就是模型认为该样本为负类的概率越大(正确的),此时 L i L_i Li越小。
多分类同理
多分类的情况实际上就是对二分类的扩展:
L = 1 N ∑ i L i = − 1 N ∑ i ∑ c = 1 M y i c log ( p i c ) L=\frac{1}{N} \sum_{i} L_{i}=-\frac{1}{N} \sum_{i} \sum_{c=1}^{M} y_{i c} \log \left(p_{i c}\right) L=N1i∑Li=−N1i∑c=1∑Myiclog(pic)
其中:
[*] M M M —类别的数量
− y i c − -y_{i c}- −yic− 一符号函数( 0 或 1 ),如果样本 i i i 的真实类别等于 c c c 取 1 ,否则取 0
− p i c -p_{i c} −pic 一观测样本 i i i 属于类别 c c c 的预测概率
参考:分类模型的 Loss 为什么使用 cross entropy 而不是 classification error 或 squared error
MSE损失
计算预测值和真实值之间的欧式距离。预测值和真实值越接近,两者的均方差就越小
均方差函数常用于线性回归(linear regression),即函数拟合(function fitting)。
J ( w , b ) = 1 2 m ∑ i = 1 m ( a i − y i ) 2 J(w, b)=\frac{1}{2 m} \sum_{i=1}^{m}\left(a_{i}-y_{i}\right)^{2} J(w,b)=2m1i=1∑m(ai−yi)2很好理解,使用( a i − y i a_i - y_i ai−yi)即可衡量第 i i i个点真实值与预测值之间的差距。
那么为什么要有平方呢?
这是因为( a i − y i a_i - y_i ai−yi)可能会出现负值,而加绝对值又不太好处理,因此用平方来表示。
那么为什么要求和之后除以 m m m呢?
m为点的个数,除以m相当于取平均,可以反映整体的拟合状况。
那么为什么除以m之后还要除以2呢?
其实除不除都可以,只不过损失函数在误差反向传播或者优化时要进行求导。那么平方项求导之后前方就会有系数2,刚好与分母上的2相消。
第 4 章 前馈神经网络
[*]掌握神经网络特征
[*]激活函数(常用激活函数:S 型激活函数、斜坡型激活函数、复合激活函数);
[*]掌握前馈神经网络结构
[*]掌握前向传播及反向传播算法
神经网络的主要特征:
[*]信息表示是分布式的(非局部的);
[*]记忆和知识是存储在单元之间的连接上;
[*]通过逐渐改变单元之间的连接强度来学习新的知识。
激活函数
激活函数的几个特征
[*]连续并可导(允许少数点上不可导)的非线性函数。
[*]激活函数及其导函数要尽可能的简单
[*]激活函数的导函数的值域要在一个合适的区间内
常用激活函数:S 型激活函数、斜坡型激活函数、复合激活函数
S 型激活函数
S 型激活函数是指Sigmoid型函数,常用的 Sigmoid型函数有Logistic函数和Tanh函数。
L o g i s t i c : σ ( x ) = 1 1 + e − x Logistic: \sigma(x) = \frac{1}{1+e^{-x}} Logistic:σ(x)=1+e−x1
优点:
[*]Logistic函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层。
[*]连续函数,便于求导。
缺点:
[*]sigmoid函数在变量取绝对值非常大的正值或负值时会出现饱和现象,意味着函数会变得很平,并且对输入的微小改变会变得不敏感。
[*]在反向传播时,当梯度接近于0,权重基本不会更新,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
[*]sigmoid函数的输出不是0均值的,会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。
[*]计算复杂度高,因为sigmoid函数是指数形式。
t a n h ( x ) = e x − e − x e x + e x = 2 σ ( 2 x ) − 1 tanh(x) = \frac{e^{x} - e^{-x}}{e^{x}+e^{x}} = 2\sigma(2x) - 1 tanh(x)=ex+exex−e−x=2σ(2x)−1
Tanh函数是 0 均值的,因此实际应用中 Tanh 会比 sigmoid 更好。但是仍然存在梯度饱和与exp计算的问题
https://img-blog.csdnimg.cn/634a3ffd66cf4121999934ba9c305eb9.png
斜坡型激活函数
斜坡型激活函数主要是 R E L U RELU RELU函数以及一系列 R E L U RELU RELU函数的改进。
RELU函数
ReLU ( x ) = { x x ≥ 0 0 x < 0 = max ( 0 , x ) \begin{aligned} \operatorname{ReLU}(x) &= \begin{cases}x & x \geq 0 \\ 0 & x0 \\ \gamma x & \text { if } x \leq 0\end{cases} =\max (0, x)+\gamma \min (0, x) \end{aligned} LeakyReLU(x)={xγx if x>0 if x≤0=max(0,x)+γmin(0,x)其中 γ \gamma γ是一个很小的常数。而 γ \gamma γ也可以作为一个参数来学习。Parametric ReLU,PReLU,这样不同的神经元就可以有不同的激活函数,相对更加灵活。
但即使这样仍然有一个问题没有解决,输出并不是0中心化的。因此为了解决这一问题,又提出了 E L U ELU ELU
ELU
ELU ( x ) = { x if x > 0 γ ( exp ( x ) − 1 ) if x ≤ 0 = max ( 0 , x ) + min ( 0 , γ ( exp ( x ) − 1 ) ) \begin{aligned} \operatorname{ELU}(x) &= \begin{cases}x & \text { if } x>0 \\ \gamma(\exp (x)-1) & \text { if } x \leq 0\end{cases} =\max (0, x)+\min (0, \gamma(\exp (x)-1)) \end{aligned} ELU(x)={xγ(exp(x)−1) if x>0 if x≤0=max(0,x)+min(0,γ(exp(x)−1))
其中 γ ≥ 0 \gamma \geq 0 γ≥0 是一个超参数, 决定 x ≤ 0 x \leq 0 x≤0 时的饱和曲线,并调整输出均值在 0附近。虽然ELU解决了死亡RELU的问题,也解决了输出的0中心化问题,但是由于引入了e,提高了计算的复杂度,因此运行起来相对会慢一些。
https://img-blog.csdnimg.cn/8b040e884f1745fab834c75b99ef4ded.png
复合激活函数
Swish函数
Swish 函数是一种自门控 ( Self-Gated ) 激活 函数, 定义为
swish ( x ) = x σ ( β x ) , \operatorname{swish}(x)=x \sigma(\beta x), swish(x)=xσ(βx),
其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 为 Logistic 函数, β \beta β 为可学习的参数或一个固定超参数. σ ( ⋅ ) ∈ ( 0 , 1 ) \sigma(\cdot) \in(0,1) σ(⋅)∈(0,1) 可 以看作一种软性的门控机制. 当 σ ( β x ) \sigma(\beta x) σ(βx) 接近于 1 时, 门处于 “开” 状态, 激活函数的 输出近似于 x x x 本身; 当 σ ( β x ) \sigma(\beta x) σ(βx) 接近于 0 时, 门的状态为 “关”, 激活函数的输出近似 于 0 .
GELU(Gaussian Error Linear Unit,高斯误差线性单元)也是一种通过门控机制来调整其输出值的激活函数,和 Swish 函数比较
类似.
G E L U (
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]