机器学习——LR与理论基础

目录

 

Logistic回归

另一种更经典的解释

损失函数

什么是损失函数?

损失函数的选择需要考虑哪些问题?如何选择损失函数?

回归问题通常有哪些损失函数?

分类问题通常有哪些损失函数?

激活函数

什么样的函数可以做激活函数?

应用中如何选择合适的激活函数?

Sigmoid激活函数:二分类问题

Softmax激活函数:多分类问题

tanh正切函数

ReLU 激活函数

LeakyReLU

Maxout

梯度下降方法:SGD,Momentum,AdaGrad,RMSProp,Adam

概述

批量梯度下降法(Batch gradient descent)

随机梯度下降法(Stochastic gradient descent)

小批量梯度下降

在线学习

映射化简和数据并行

冲量梯度下降,Momentum:

其他三种经典的梯度下降方法

 


新的资料

https://www.bilibili.com/video/BV1s4411L76U?from=search&seid=11932691841799835593

 

Logistic回归

https://baozoulin.gitbook.io/-stanford-machine-learning/week-3/luojihuigui

 

 

另一种更经典的解释


损失函数

什么是损失函数?

https://zhuanlan.zhihu.com/p/58883095

参考链接:https://cloud.tencent.com/developer/article/1165263https://zhuanlan.zhihu.com/p/58883095 

损失函数(loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:

  其中,前面的均值函数表示的是经验风险函数,L代表的是损失函数,后面的Φ是正则化项

损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。

 

损失函数的选择需要考虑哪些问题?如何选择损失函数?

  1. 是否有异常值、机器学习算法的选择、梯度下降的时间复杂度、求导的难易程度以及预测值的置信度等等。

  2. 因此,不存在一种损失函数适用于处理所有类型的数据。

 

回归问题通常有哪些损失函数?

  1. 均方误差(MSE,也称为L2损失)是最常用的回归损失函数,计算方法是求预测值与真实值之间距离的平方和

  2. 平均绝对值误差(也称L1损失): MAE是目标值和预测值之差的绝对值之和。其只衡量了预测值误差的平均模长,而不考虑方向,取值范围也是从0到正无穷)—— 简单来说,MSE计算简便,但MAE对异常点有更好的鲁棒性,因为平方会扩大异常点的影响且赋予更大的权重。所以在选择的时候需要看异常点在业务中是否是很重要的异常情况

 

分类问题通常有哪些损失函数?

  1. 最简单的是0-1损失函数(zero-one loss): 指预测值和目标值不相等为1, 否则为0。 感知机就是用的这种损失函数,非凸函数,不太实用

  2. 在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数。

    交叉熵的公式:

  3. binary_crossentropy(亦称作对数损失函数,即交叉熵损失函数,logloss)

  4. categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列

    取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小。

    下图是另一种表达方式:

  5. sparse_categorical_crossentropy:多标签分类问题的交叉熵损失函数;如上,但接受稀疏标签。注意,使用该函数时仍然需要你的标签与输出值的维度相同,你可能需要在标签数据上增加一个维度:np.expand_dims(y,-1)

    我们不能使用softmax,因为softmax始终只会迫使一个类别变为1,而其他类别变为0。因此,由于我们试图预测每个类别的个体概率,因此可以简单地在所有输出节点值上保持sigmoid。

    至于损失,我们可以直接在每个节点上使用对数损失进行求和,类似于在多类分类中所做的。

  6. softmax使用的即为交叉熵损失函数,binary_cossentropy为二分类交叉熵损失,categorical_crossentropy为多分类交叉熵损失,当使用多分类交叉熵损失函数时,标签应该为多分类模式,即使用one-hot编码的向量。

 

2、SVM的hinge损失函数

hinge损失:SVM用的合页函数。 实现了软间隔分类。保持了支持向量机解的稀疏性

换用其他的Loss函数的话,SVM就不再是SVM了。正是因为HingeLoss的零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这才是支持向量机最大的优势所在,对训练样本数目的依赖大大减少,而且提高了训练效率。

  


激活函数

参考链接:https://zhuanlan.zhihu.com/p/32610035

https://blog.csdn.net/edogawachia/article/details/80043673

激活函数给神经元引入了非线性因素,如果不用激活函数的话,无论神经网络有多少层,输出都是输入的线性组合。

激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题,比如使得神经网络在理论上几乎可以逼近任何非线性函数。(https://blog.csdn.net/program_developer/article/details/78704224

激活函数的发展经历了Sigmoid -> Tanh -> ReLU -> Leaky ReLU -> Maxout这样的过程,还有一个特殊的激活函数Softmax,因为它只会被用在网络中的最后一层,用来进行最后的分类和归一化。

 

什么样的函数可以做激活函数?

参考:https://blog.csdn.net/ch1209498273/article/details/78587523?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight

1. 非线性:即导数不是常数。这个条件前面很多答主都提到了,是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。

2. 几乎处处可微:可微性保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响[1]。

3. 计算简单:激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等操作的激活函数更受欢迎的其中一个原因

4. 非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。 饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。最经典的例子是Sigmoid,它的导数在x为比较大的正值和比较小的负值时都会接近于0。更极端的例子是阶跃函数,由于它在几乎所有位置的梯度都为0,因此处处饱和,无法作为激活函数。ReLU在x>0时导数恒为1,因此对于再大的正值也不会饱和。但同时对于x<0,其梯度恒为0,这时候它也会出现饱和的现象(在这种情况下通常称为dying ReLU)。Leaky ReLU[3]和PReLU[4]的提出正是为了解决这一问题。

5. 单调性(monotonic):即导数符号不变。这个性质大部分激活函数都有,除了诸如sin、cos等。个人理解,单调性使得在激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。

6. 输出范围有限:有限的输出范围使得网络对于一些比较大的输入也会比较稳定

 

应用中如何选择合适的激活函数?

参考链接:https://blog.csdn.net/tyhj_sf/article/details/79932893?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

这个问题目前没有确定的方法,凭一些经验吧。

1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。

2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.

3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.

最经典的参考链接:https://blog.csdn.net/tyhj_sf/article/details/79932893?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

 

Sigmoid激活函数:二分类问题

  1. 为了获得概率格式的输出,我们需要应用一个激活函数。 由于概率要求取0到1之间的值,因此我们将使用S型函数

缺点:

  1. 一度很受欢迎,从曲线来看,它像一个连续版的阈值激活函数。它受到梯度消失gradient vanishing问题的困扰,即函数的梯度在两个边缘附近变为零。这使得训练和优化变得困难。在大的正数和负数作为输入的时候,梯度就会变成零,使得神经元基本不能更新。

  2. 只有正数输出(不是zero-centered),这就导致所谓的zigzag现象。输出不是以0为均值,局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。——batch训练能缓解这个问题

 

Softmax激活函数:多分类问题

  1. 在考虑多个类别的概率时,我们需要确保所有单个概率的总和等于1,因为这是定义概率的方式。 应用S形不能确保总和始终等于1,因此我们需要使用另一个激活函数Softmax。

  2. 此功能确保所有输出节点的值都在0–1之间,并且所有输出节点值的总和始终等于1

  3. 为什么在归一化每个值之前必须将它们传递给指数呢? 为什么我们不能仅将值本身标准化? 这是因为softmax的目标是确保一个值非常高(接近1),而所有其他值都非常低(接近0)

  4. softMax的结果相当于输入图像被分到每个标签的概率分布,该函数是单调增函数,即输入值越大,输出也就越大,输入图像属于该标签的概率就越大。

  5. Softmax是Sigmoid的扩展,当类别数k=2时,Softmax回归退化为Logistic回归

 

补充:

多分类LR与二分类LR是统一的,对数损失函数与交叉上本质是一致的。

tanh正切函数

  1. 在形状上也是 S 形并具有非线性特性。该函数以 0 为中心,与 Sigmoid 函数相比具有更陡峭的导数。

  2. 与 Sigmoid 函数一样,它也受到梯度消失问题的影响。

 

ReLU 激活函数

 

  1. CNN中常用。对正数原样输出,负数直接置零

优点:

  1. 线性激活功能的整流版本,这种整流功能允许其用于多层时捕获非线性,解决了梯度消失的问题

  2. 计算速度快,对正数原样输出,负数直接置零

  3. relu计算上比sigmoid或者tanh更省计算量,因为不用exp,因而收敛较快。

缺点:

  1. 但是还是非zero-centered。

  2. 死亡 ReLU 的问题,也就是说,那些没有激活dead的神经元的梯度为零,因此将无法进行任何训练,并停留在死亡状态。某些神经元可能永远不会被激活,导致相应的参数永远不能被更新

  3. 一定要小心设置 learning rate,而且要注意不要让你的网络出现很多 “dead”。同时参数初始化注意,防止

LeakyReLU

为了解决上述的dead ReLU现象。这里选择一个数,让负数区域不在饱和死掉。这里的斜率都是确定的。

 

Maxout

  1. 通过分段线性函数来拟合所有可能的凸函数来作为激活函数的,但是由于线性函数是可学习,所以实际上是可以学出来的激活函数。具体操作是对所有线性取最大,也就是把若干直线的交点作为分段的界,然后每一段取最大。

  2. 本来传统的MLP算法在第i层到第i+1层,参数只有一组,然而现在我们不这么干了,我们在这一层同时训练n组的w、b参数,然后选择激活值Z最大的作为下一层神经元的激活值,这个max(z)函数即充当了激活函数。

  3. Maxout是对ReLU和leaky ReLU的一般化归纳,

  4. Maxout具有ReLU的优点,如计算简单,不会 saturation,同时又没有ReLU的一些缺点,如容易go die。

缺点:

  1. 每个神经元的参数double,这就导致整体参数的数量激增。

 


 


 

参考链接:

https://mp.weixin.qq.com/s/fi2O_q2gfYoDq-pJc73bjg

 

 

 


几率-对数几率

概率probability != 胜算odds

https://www.youtube.com/watch?v=8nm0G-1uJzA

https://www.youtube.com/watch?v=vN5cNN2-HWE

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值