从零实现深度学习框架——Softmax回归简介

Posted 愤怒的可乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零实现深度学习框架——Softmax回归简介相关的知识,希望对你有一定的参考价值。

引言

本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。

要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽量不适用外部完备的框架前提下,实现我们想要的模型。本系列文章的宗旨就是通过这样的过程,让大家切实掌握深度学习底层实现,而不是仅做一个调包侠。
本系列文章首发于微信公众号:JavaNLP

逻辑回归只能处理二分类问题,但是很多时候我们遇到的是多分类问题。此时就需要用到多元逻辑回归(multinomial logistic regression),也称为Softmax回归。本文就来了解下Softmax回归。

Softmax回归

在softmax回归中,我们希望为每个样本从 K K K个类别中标记一个类别,假设只有一个类别是正确的。

我们使用下面的表示:每个输入 x x x对应的输出 y y y是一个长度为 K K K的向量。如果类 c c c是正确的类别,我们设 y c = 1 y_c=1 yc=1,然后设置 y y y向量中所有其他元素为 0 0 0。即 y c = 1 y_c=1 yc=1同时 y j = 0 ∀ j ≠ c y_j =0 \\quad\\forall j \\neq c yj=0j=c,这种叫作独热向量(ont-hot vector)。分类器需要输出一个估计向量 y ^ \\hat y y^。对于每个类 k k k y ^ k \\hat y_k y^k的值就是分类器对于概率 p ( y k = 1 ∣ x ) p(y_k = 1|x) p(yk=1x)的估计。

Softmax回归中使用Sigmoid函数的推广版——Softmax函数,来计算 p ( y k = 1 ∣ x ) p(y_k=1|x) p(yk=1x)

输入一个向量 z = [ z 1 , z 2 , ⋯   , z K ] z=[z_1,z_2,\\cdots,z_K] z=[z1,z2,,zK],其中元素可以是任意值,映射它为一个概率分布,即每个元素的值被映射到 ( 0 , 1 ) (0,1) (0,1)之间,同时所有映射值总和为 1 1 1

对于维度为 K K K的向量 z z z,softmax定义为:
softmax ( z i ) = exp ⁡ ( z i ) ∑ j = 1 K exp ⁡ ( z j ) 1 ≤ i ≤ K (1) \\textsoftmax(z_i) = \\frac\\exp(z_i)\\sum_j=1^K \\exp(z_j) \\quad 1 \\leq i \\leq K \\tag1 softmax(zi)=j=1Kexp(zj)exp(zi)1iK(1)

输入向量 z z z经过softmax后得到向量:
softmax ( z ) = [ exp ⁡ ( z 1 ) ∑ i = 1 K exp ⁡ ( z i ) , exp ⁡ ( z 2 ) ∑ i = 1 K exp ⁡ ( z i ) , ⋯   , exp ⁡ ( z K ) ∑ i = 1 K exp ⁡ ( z i ) ] (2) \\textsoftmax(z) = \\left[ \\frac\\exp(z_1)\\sum_i=1^K \\exp(z_i), \\frac\\exp(z_2)\\sum_i=1^K \\exp(z_i),\\cdots, \\frac\\exp(z_K)\\sum_i=1^K \\exp(z_i)\\right] \\tag2 softmax(z)=[i=1Kexp(zi)exp(z1),i=1Kexp(zi)exp(z2),,i=1Kexp(zi)exp(zK)](2)
该向量内所有元素总和为 1 1 1,分母 ∑ i = 1 K exp ⁡ ( z i ) \\sum_i=1^K \\exp(z_i) i=1Kexp(zi)用于将所有的值标准化成概率。

应用Softmax

类似逻辑回归,输入是一个权重向量 w w w和一个输入向量 x x x之间的点积,加上偏差 b b b。但不同的是,这里我们要为每个类提供独立的权重向量 w k w_k wk和偏差 b k b_k bk。这样,我们的每个输出类 y ^ k \\hat y_k y^k的概率可以计算为:
p ( y k = 1 ∣ x ) = exp ⁡ ( w k ⋅ x + b k ) ∑ j = 1 K exp ⁡ ( w j ⋅ x + b j ) (3) p(y_k=1|x) = \\frac\\exp(w_k \\cdot x + b_k)\\sum_j=1^K \\exp(w_j \\cdot x + b_j) \\tag3 p(yk=1x)=j=1Kexp(wjx+bj)exp(wkx+bk)(3)

上图是公式 ( 3 ) (3) (3)的可视化,Softmax有 K K K个权重和偏差(上图没有体现出来)。

公式 ( 3 ) (3) (3)形式看起来似乎会分别计算每个输出。相反,更常见的做法是通过向量化利用GPU来更有效地计算。我们将通过将 K K K个权向量的集合表示为权矩阵 W W W和偏差向量 b b b W W W的第以上是关于从零实现深度学习框架——Softmax回归简介的主要内容,如果未能解决你的问题,请参考以下文章

Softmax 回归的从零开始实现 pytorch

机器学习:Logistic回归原理及其实现

深度学习:《100天一起学习PyTorch》第五天:从0到1实现Softmax回归(含源码)

《动手学深度学习》线性回归从零开始(linear-regression-scratch)

《动手学深度学习》线性回归从零开始(linear-regression-scratch)

翻译: 3.7. Softmax 回归的简明实现 pytorch