李宏毅课程笔记

机器学习模型

@(实验室)[笔记]

学习资料

https://datawhalechina.github.io/leeml-notes
李宏毅机器学习课笔记
https://www.bilibili.com/video/av59538266/?p=6
李宏毅课程的视频
问题类型:regression(预测),classification(分类),structured(比如机器翻译、语音识别合成等等)
监督式、半监督、无监督、reinforcement learning(不是给出正确结果而是给出分数/反馈)
回归一节有学习率的定义。更新参数的方法有:梯度下降。
其中正则化的好处:虽然加入更多特征,但其中一些特征权值过高就会过拟合。

p5error来自哪里?

bias 和variance (偏差和方差)。
比较简单的模型不容易受到训练数据的影响,但是表达能力有限,不能够结合更多的特征。(欠拟合),距离真实的function比较远。

梯度下降要注意的
  1. 调节learning rate。如果太小,loss下降缓慢。如果太大,可能loss爆炸,或者来回震荡无法下降。如果参数很多,可以visualize参数的变化与loss变化。
  2. 自动调节learning rate。学习率随着学习过程要越来越小。最好给不同参数不同的learning rate,一个方法是:adagrad

    Alt text
    Alt text
    w是参数,g是偏微分值,σ是过去所有偏微分值的均方根值。
    均方根:N个数的平方和除以N后开方。
    最后约简公式:
    Alt text

  3. 更快的梯度下降——stochastic:loss只对一个example进行计算,训练一个example就update一次参数。
  4. feature scaling: 如果不同特征值分布的范围很不一样,可以对输入的特征值做rescale使得分布范围一样。这样,会使参数对loss的图形比较像个“圆”,因为参数变化是顺着等高线的,所以圆比椭圆更快。方法:

    Alt text

  5. 梯度下降的数学原理!泰勒展开。泰勒定理。保证正确的前提是,移动的步伐要很小!

分类问题:
  1. 二元分类:方程的结果用》/《0来划分。loss可以是这个方程在训练集中分类错误的次数。 找到最佳参数的方法: perceptron/SVM。
  2. 或者 概率分类模型 高斯分布有两个参数μ和Σ,如果调整参数,就可以让一个类的feature分布在这个高斯分布的中心。参数越好,在高斯分布下的特征就会有更高的概率。

    Alt text
    Alt text
    要防止overfitting,所以可以给所有的高斯分布都用一个Σ(但是μ不同),取极值的Σ就是所有Σ的加权和。

  3. sigmoid函数:上面的概率模型化简之后,会变成sigmoid函数fz,z又可以化简为线性的WX+B(所以就是用了同一个Σ之后,概率模型就是线性的)。→逻辑回归。
  4. 逻辑回归的loss方程!就是交叉熵

    Alt text
    按照概率模型,就是要找到w、b,使得这个方程得到trainingdata的概率最大。二分类,当方程表示是C1的概率时,用1表示C1,0表示C2,所有项可以写成一样的,然后相加。:
    Alt text
    该方程即 Cross entropy between two Bernoulli distribution
    Alt text
    得到这个LOSS方程后,也可以用梯度下降来优化参数。首先要对w求偏微分:(w是i维的向量,因为每一个x有i个输入特征)
    Alt text
    求出来的梯度下降公式,和linear regression是一模一样的!

    扫描二维码关注公众号,回复: 7231876 查看本文章
  5. 多个类别的分类:方法差不多,softmax:

    Alt text
    作用就是,output出来的z值限制在[0,1]之间。把大的值和小的值之间的差距拉得更开,强化。经过softmax之后,就是属于某一个类别的概率(分数)。
    这个方法的推导,可以有两种角度,一个是假设数据是高斯分布,然后用高斯分布推导出softmax的公式来;另一个是通过maximum entropy的角度。
    他的loss函数也是交叉熵:
    Alt text

  6. 如果特征的分布使得用logistic回归不能用直线把类别分开,可以转化feature。
  7. 让机器自己做feature transformation: 级联的logistic回归。而,一个logistic regression单元,就叫做一个神经元

深度学习

连接各个神经元的方法:
  1. fully connected feedforward network,几乎跟之前一样,把神经元用不同方式连接,就有不同的网络结构。神经元那里的函数,已经不常用sigmoid了。最后一层仍然还是一个softmax,得到网络的输出。
  2. loss也和之前一样,分类问题就是算yhead 和y的交叉熵,然后对整个训练集的例子求总和。
  3. 求参数的方法也用梯度下降,算微分可以用back propagation向后传播的方法。向后传播:

    Alt text
    如图,就是利用求微分的链式规则,从最后一层逐步向后传递直到输入层,求微分。(其中的C是y和yhead的距离(一般是交叉熵))。z,是某一个神经元的线性函数的结果。如果已经到输出层前一个hidden layer,那就直接是
    Alt text
    否则就是递归计算。(实际操作肯定是从最后一层往前算)

什么是全连接层?

全连接层不是必要的,经常替换成全卷积。
fully connected layer -fc 在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽。
全连接层参数冗余,但是全连接层可以保证模型表示能力的迁移。(https://www.zhihu.com/question/41037974)
https://blog.csdn.net/zfjBIT/article/details/88075569

感受野?

一个像素可以表示原输入图像几个像素的信息。前面的卷积层感受野小,可以捕捉到局部细节的信息,即输出图像的每个像素(Activation激活值)只是感受到输入图像很小范围数值进行计算的结果。

上、下采样

下采样就是池化,上采样是相反的操作。池化层作用:

  • 降维,缩减模型大小,提高计算速度
  • 降低过拟合概率,提升特征提取鲁棒性
  • 对平移和旋转不敏感

池化有均值池化和max池化。

白化?

白化的目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性。
一幅图像最终成像会受环境照明强度、物体反射、拍摄相机等多因素的影响。为了能获得图像中包含的那些不受外界影响的恒定信息,我们需要对图像进行白化处理。(图像白化(whitening)可用于对过度曝光或低曝光的图片进行处理,处理的方式就是改变图像的平均像素值为0 ,改变图像的方差为单位方差 1。)一般为了去除这些因素的影响,我们将它的像素值转化成零均值和单位方差。所以我们首先计算原始灰度图像的像素平均值和方差值。Alt text

————————————————
版权声明:本文为CSDN博主「Dean0Winchester」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38906523/article/details/79853984

猜你喜欢

转载自www.cnblogs.com/rarecu/p/11487423.html