线性神经网络

1. 线性回归 Linear Regression

回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。

线性回归是指:目标可以表示为特征的加权和,即 y = w 1 x 1 + w 2 x 2 + b y = w_1 x_1 + w_2 x_2 + b y=w1x1+w2x2+b 。其中 w 1 , w 2 w_1 , w_2 w1,w2 称为权重(weight), b b b 称为偏置(bias)。

在这里插入图片描述

给定一个数据集,我们的目标是寻找模型的权重 w w w和偏置项 b b b,使得模型做出的预测更加贴近于真实值(误差尽可能小)。

在机器学习领域,我们通常使用的是高维数据集。当输入包含 d d d个特征时,我们将预测结果 y ^ \widehat{y} y 表示为: y ^ = w 1 x 1 + w 2 x 2 + . . . + w d x d + b = X w + b \widehat{y} = w_1 x_1 + w_2 x_2 + ... + w_dx_d + b = \pmb{Xw} + b y =w1x1+w2x2+...+wdxd+b=XwXw+b

我们用 损失函数(loss function)来量化目标的预测值与真实值之间的差距。我们经常用平方误差函数来作为损失函数,当样本 i i i的预测值为 y ^ ( i ) \widehat{y}^{(i)} y (i) ,相应的真实标签为 y ( i ) y^{(i)} y(i) 时,平方误差可以定义为:
l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 l^{(i)}(w,b)=\frac{1}{2}(\widehat{y}^{(i)} - y^{(i)})^2 l(i)(w,b)=21(y (i)y(i))2
为了度量模型在整个数据集上的质量,我们需要计算在训练集 n n n个样本上的损失均值:
L ( w , b ) = 1 n ∑ i = 1 n 1 2 ( y ^ ( i ) − y ( i ) ) 2 L(w,b) = \frac{1}{n} \sum\limits^n_{i=1} \frac{1}{2}(\widehat{y}^{(i)} - y^{(i)})^2 L(w,b)=n1i=1n21(y (i)y(i))2
在训练模型时,我们希望找到一组参数 ( w ∗ , b ∗ ) (w^*,b^*) (w,b) ,这组参数能够最小化所有训练样本上的总损失,即 w ∗ , b ∗ = a r g min ⁡ w , b L ( w , b ) w^*, b^* = arg \min\limits_{w,b} L(w,b) w,b=argw,bminL(w,b) 。求解方法:梯度下降法。



2. 梯度下降法 Gradient Descent

梯度下降法的基本思想可以类比为一个下山的过程,需要从山上下来,找到山的最低点。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭(梯度)的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了。
在这里插入图片描述


计算公式可以表示为:

在这里插入图片描述


在这里插入图片描述
其中, ▽ L ( θ ) \triangledown L(\theta) L(θ) 表示梯度, η \eta η 为学习率或步长,用来控制每一步走的距离。梯度前面加一个负号,意味着朝着梯度相反的方向前进,即朝着下降最快的方向走。

其他常见的梯度下降算法:

  • 小批量随机梯度下降(Mini Batch Gradient Descent):在每次梯度下降的过程中,只选取一部分的样本数据进行计算梯度,比如整体样本1/100的数据。在数据量较大的项目中,可以明显地减少梯度计算的时间。
  • 随机梯度下降(Stochastic Gradient Descent):随机梯度下降算法只随机抽取一个样本进行梯度计算,由于每次梯度下降迭代只计算一个样本的梯度,因此运算时间比小批量样本梯度下降算法还要少很多,但由于训练的数据量太小(只有一个),因此下降路径很容易受到训练数据自身噪音的影响,看起来就像醉汉走路一样,变得歪歪斜斜的。



3. Logistic回归

简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。 注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘。

那么逻辑回归与线性回归是什么关系呢?

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归通过Sigmoid函数引入了非线性因素,将线性回归中的预测值转换为了概率,因此可以轻松处理0/1分类问题。

假设函数 Hypothesis function

首先先介绍一下sigmoid函数,sigmoid函数的公式为:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1
其函数图像如下:
在这里插入图片描述
从上图可以看到sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0或者1。它的这个特性对于解决二分类问题十分重要。


逻辑回归的假设函数形式如下:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta ^Tx}} hθ(x)=g(θTx)=1+eθTx1
其中, x x x 是我们的输入, θ \theta θ 是我们要求的参数, g ( ⋅ ) g(\cdot) g() 称为激活函数。

一个机器学习的模型,实际上是把决策函数限定在某一组条件下,这组限定条件就决定了模型的假设空间。而逻辑回归模型所做的假设是:
P ( y = 1 ∣ x ; θ ) = g ( θ T x ) = 1 1 + e − θ T x P(y=1 | x;\theta) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta ^Tx}} P(y=1∣x;θ)=g(θTx)=1+eθTx1
这个函数的意思是在给定 x x x θ \theta θ 的条件下 y = 1 y=1 y=1 的概率。与之对应的决策函数为 y ∗ = 1 , i f P ( y = 1 ∣ x ) > 0.5 y^*=1 , if P(y=1|x)>0.5 y=1,ifP(y=1∣x)>0.5 。选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回要求高,则可以选择阈值小一些。

决策边界

决策边界,也称为决策面,是用于在N维空间,将不同类别样本分开的平面或曲面。

线性决策边界非线性决策边界

决策边界其实就是一个方程,在逻辑回归中,决策边界由 θ T x = 0 \theta ^Tx=0 θTx=0 定义。

损失函数

训练参数的过程其实就是不断改变 θ \theta θ,从而使损失函数 L ( θ ) L(\theta) L(θ) 的值更小的过程,即 θ = a r g min ⁡ θ L ( θ ) \theta = arg\min\limits_\theta L(\theta) θ=argθminL(θ)

  • 在线性回归中,常用均方误差(Mean squared error, MSE)作为损失函数。(m为样本数量) L ( θ ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 L(\theta) = \frac{1}{2m} \sum\limits^m_{i=1} (\widehat{y}^{(i)} - y^{(i)})^2 L(θ)=2m1i=1m(y (i)y(i))2
  • 在逻辑回归中,常采用交叉熵(Cross Entropy)作为损失函数。(n表示分类问题中的n种类别)
    L ( θ ) = − ∑ i = 1 n y i l o g ( y ^ i ) L(\theta) = - \sum\limits^n_{i=1} y_ilog(\widehat{y}_i) L(θ)=i=1nyilog(y i)

    :熵是服从某一特定概率分布事件的理论最小平均编码长度(即所有信息量的期望)。不同的人对熵有不同的解释:混乱程度,不确定性,惊奇程度,不可预测性,信息量等等。
    对于离散变量 i 的概率分布p(i),熵的计算公式可以表示为:
    H ( p ( i ) ) = − ∑ i n p ( x i ) l o g 2 p ( x i ) H(p(i)) = - \sum\limits^n_i p(x_i)log_2p(x_i) H(p(i))=inp(xi)log2p(xi) 其中,n表示事件的所有可能性。
    对于二分类问题,熵的计算公式可以简化为:
    H ( p ( i ) ) = − p ( x ) l o g 2 p ( x ) − ( 1 − p ( x ) ) l o g 2 ( 1 − p ( x ) ) H(p(i)) = -p(x)log_2p(x) - (1-p(x))log_2(1-p(x)) H(p(i))=p(x)log2p(x)(1p(x))log2(1p(x))
    对于连续变量 x 的概率分布P(x),熵的公式可以表示为:
    H ( p ( x ) ) = − ∫ p ( x ) l o g 2 p ( x ) d x H(p(x)) = - \int p(x)log_2p(x)dx H(p(x))=p(x)log2p(x)dx

    因此,只要我们知道了任何事件的概率分布,我们就可以计算它的熵;那如果我们不知道事件的概率分布,又想计算熵,该怎么做呢?那我们来对熵做一个估计吧,熵的估计的过程自然而然的引出了交叉熵。

    相对熵(KL散度):在概率和统计中,我们通常会用更简单的近似分布来代替观察到的数据或复杂的分布。KL散度帮助我们衡量在选择近似分布时损失了多少信息。我们用P来表示样本的真实分布,Q来表示模型所预测的分布,那么KL散度的计算公式为:
    D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) D_{KL}(p||q) = \sum\limits^n_{i=1} p(x_i)log(\frac{p(x_i)}{q(x_i)}) \\ = \sum\limits^n_{i=1} p(x_i)log(p(x_i)) - \sum\limits^n_{i=1} p(x_i)log(q(x_i)) DKL(p∣∣q)=i=1np(xi)log(q(xi)p(xi))=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi)) 其中,n表示事件的所有可能性。 D K L D_{KL} DKL 的值越小,表示q的分布和p的分布越接近。


    交叉熵:我们将KL散度的计算公式进行变形:
    D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) = − H ( p ( x ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) D_{KL}(p||q) = \sum\limits^n_{i=1} p(x_i)log(p(x_i)) - \sum\limits^n_{i=1} p(x_i)log(q(x_i)) \\ = -H(p(x)) - \sum\limits^n_{i=1} p(x_i)log(q(x_i)) DKL(p∣∣q)=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))=H(p(x))i=1np(xi)log(q(xi))
    在这个式子中,后一部分 − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) - \sum\limits^n_{i=1} p(x_i)log(q(x_i)) i=1np(xi)log(q(xi)) 就是交叉熵。


    在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即,由于KL散度中的前一部分不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。


4. Softmax回归

Softmax回归(softmax regression)其实是logistic回归的一般形式,logistic回归用于二分类,而softmax回归用于多分类。

对于输入数据 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } \{(x_1,y_1), (x_2,y_2),...,(x_m,y_m) \} {(x1,y1),(x2,y2),...,(xm,ym)} k k k 个类别,即 y i ∈ { 1 , 2 , . . . , k } y_i \in \{1,2,...,k\} yi{1,2,...,k} ,那么 softmax回归主要估算输入数据 x i x_i xi 归属于哪一类。

假设函数 Hypothesis function

为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个输出对应属于某一类别的概率。在下面的例子中,该样本具有4个特征 ( x 1 , x 2 , x 3 , x 4 ) (x_1, x_2, x_3, x_4) (x1,x2,x3,x4) ,对应3个可能的输出类别(猫、狗、鸡),计算该样本属于每一类别的为规范化的预测 o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3
在这里插入图片描述

o 1 = x 1 w 11 + x 2 w 12 + x 3 w 13 + x 4 w 14 + b 1 = θ 1 T x 1 o 2 = x 1 w 21 + x 2 w 22 + x 3 w 23 + x 4 w 24 + b 2 = θ 2 T x 2 o 3 = x 1 w 31 + x 2 w 32 + x 3 w 33 + x 4 w 34 + b 3 = θ 3 T x 3 o_1 = x_1w_{11} + x_2w_{12} + x_3w_{13} + x_4w_{14} + b_1 = \theta^T_1 x_1 \\ o_2 = x_1w_{21} + x_2w_{22} + x_3w_{23} + x_4w_{24} + b_2 = \theta^T_2 x_2 \\ o_3 = x_1w_{31} + x_2w_{32} + x_3w_{33} + x_4w_{34} + b_3 = \theta^T_3 x_3 o1=x1w11+x2w12+x3w13+x4w14+b1=θ1Tx1o2=x1w21+x2w22+x3w23+x4w24+b2=θ2Tx2o3=x1w31+x2w32+x3w33+x4w34+b3=θ3Tx3

而 softmax函数的作用就是:将多个神经元的输出(比如 o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3)映射到 (0,1) 区间内,且和为1,可以理解为属于某一类别的概率,从而来进行多分类。

softmax回归将输入数据 x i x_i xi 归属于类别 j j j 的概率为:
y ^ ( j ) = P ( y i = j ∣ x i ; θ ) = e o j ∑ l = 1 k e o l = e θ j T x i ∑ l = 1 k e θ l T x i \widehat{y}^{(j)} = P(y_i = j | x_i;\theta) = \frac{e^{o_j}}{\sum\limits^k_{l=1}e^{o_l}} = \frac{e^{\theta^T_j x_i}}{\sum\limits^k_{l=1}e^{\theta^T_l x_i}} y (j)=P(yi=jxi;θ)=l=1keoleoj=l=1keθlTxieθjTxi

损失函数

softmax函数给出了一个向量 y ^ \widehat{y} y ,我们可以将其视为“对给定任意输入的 x x x属于每个类的条件概率”。对于Softmax回归,我们仍采用交叉熵(Cross Entropy)作为损失函数。当样本 i i i的预测值为 y ^ ( i ) \widehat{y}^{(i)} y (i) ,相应的真实标签为 y ( i ) y^{(i)} y(i) 时,交叉熵损失可以定义为:
l ( i ) ( y , y ^ ) = − ∑ j = 1 k y j l o g y ^ j l^{(i)}(y, \widehat{y}) = -\sum\limits^k_{j=1} y_j log\widehat{y}_j l(i)(y,y )=j=1kyjlogy j其中, y y y 是一个长度为 q q q 的独热编码(只有1位是1,其余的位都是0),所以在这个损失函数中,除了一个项以外的其余项 j j j都消失了。 相当于是只取出来 y ^ \widehat{y} y 中真实类别对应的概率值来作 l o g log log

独热编码(One-Hot Encoding):又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征(如成绩这个特征有好,中,差变成 one-hot就是100, 010, 001)。并且,这些特征互斥,每次只有一个激活。

为了度量模型在整个数据集上的质量,我们需要计算在训练集 n n n个样本上的损失均值:
L ( θ ) = − 1 n [ ∑ i = 1 n ∑ j = 1 k 1 { y i = j } l o g e θ j T x i ∑ l = 1 k e θ l T x i ] L(\theta) = -\frac{1}{n} \begin{bmatrix} \sum\limits^n_{i=1} \sum\limits^k_{j=1} 1\{y_i=j\}log\frac{e^{\theta^T_j x_i}}{\sum\limits^k_{l=1}e^{\theta^T_l x_i}} \end{bmatrix} L(θ)=n1[i=1nj=1k1{yi=j}logl=1keθlTxieθjTxi]其中, 1 { ⋅ } 1\{\cdot\} 1{} 为示性函数,即 1{值为真的表达式}=11{值为假的表达式}=0

利用梯度下降法来最小化代价函数,下面求解 θ \theta θ 的梯度:

在这里插入图片描述

正则化

当训练数据不够多的时候,容易出现过拟合现象(原因),拟合系数往往非常大,为此在损失函数后面加上一个正则项,即:
L ( θ ) = − 1 n [ ∑ i = 1 n ∑ j = 1 k 1 { y i = j } l o g e θ j T x i ∑ l = 1 k e θ l T x i ] + λ ∑ i = 1 k ∑ j = 1 n θ i j 2 L(\theta) = -\frac{1}{n} \begin{bmatrix} \sum\limits^n_{i=1} \sum\limits^k_{j=1} 1\{y_i=j\}log\frac{e^{\theta^T_j x_i}}{\sum\limits^k_{l=1}e^{\theta^T_l x_i}} \end{bmatrix} + \lambda \sum\limits^k_{i=1} \sum\limits^n_{j=1} \theta^2_{ij} L(θ)=n1[i=1nj=1k1{yi=j}logl=1keθlTxieθjTxi]+λi=1kj=1nθij2
这里还不太明白,弄明白了再继续补充。



本文的代码可在 我的 github 中进行查看。


参考
[1] 李沐-动手学深度学习
[2] 李宏毅-机器学习课程
[3] 梯度下降法原理讲解——机器学习
[4] 逻辑回归(Logistic Regression)(一)
[5] 一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉
[6] softmax回归原理与实现
[7] 线性回归正则化 regularized linear regression

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值