最近要开题了,可能无法及时更新(反正也没人看╮(╯▽╰)╭
分类问题
首先给定数据集{x(i),y(i)}i=1N\left \{ x_{(i)},y_{(i)} \right \}_{i=1}^{N}{x(i),y(i)}i=1N
x(i)x_{(i)}x(i)为样本数据,y(i)y_{(i)}y(i)为对应的标签。
一般的分类问题的解决方案是找到一个决策平面,如经典的SVM算法。如图所示:
softmax函数
公式为
p(yj=1∣x)=exp(Wj⋅x)∑c=1Cexp(Wc⋅x)p(y_{j}=1|x)=\frac{exp(W_{j} \cdot x)}{\sum_{c=1}^{C} exp(W_{c} \cdot x)}p(yj=1∣x)=∑c=1Cexp(Wc⋅x)exp(Wj⋅x)
简单讲就是将输出通过softmax函数转化为概率形式。
使用交叉熵损失函数,计算一个样本xxx的损失函数:
−∑j=1Cyilog(p(yj=1∣x))=−∑j=1Cyilog(exp(Wj⋅x)∑c=1Cexp(Wc⋅x))-\sum_{j=1}^{C}y_{i}log(p(y_{j}=1|x))=-\sum_{j=1}^{C}y_{i} log\left ( \frac{exp(W_{j} \cdot x)}{\sum_{c=1}^{C} exp(W_{c} \cdot x)} \right )−j=1∑Cyilog(p(yj=1∣x))=−j=1∑Cyilog(∑c=1Cexp(Wc⋅x)exp(Wj⋅x))
由于类别是one-hot编码,yiy_{i}yi仅在一个位置上为1,其余全为0,因此损失函数可以简化得:−log(exp(Wk⋅x)∑c=1Cexp(Wc⋅x)) -log\left ( \frac{exp(W_{k} \cdot x)}{\sum_{c=1}^{C} exp(W_{c} \cdot x)} \right )−log(∑c=1Cexp(Wc⋅x)exp(Wk⋅x))
扩展为N个样本:−∑i=NClog(exp(Wk(i)⋅x(i))∑c=1Cexp(Wc⋅x(i)))-\sum_{i=N}^{C}log\left ( \frac{exp(W_{k(i)} \cdot x^{(i)})}{\sum_{c=1}^{C} exp(W_{c} \cdot x^{(i)})} \right )−i=N∑Clog(∑c=1Cexp(Wc⋅x(i))exp(Wk(i)⋅x(i)))
在词向量学习中,需要同时学习权值矩阵和词向量,假设一个词向量为ddd维,类别数目为CCC,因此需要C⋅dC \cdot dC⋅d个权值参数,假设需要更新∣V∣\left | V \right |∣V∣个词向量,那么总共的参数数目就是C⋅d+∣V∣⋅dC\cdot d+\left | V \right |\cdot dC⋅d+∣V∣⋅d,参数数目过多容易导致过拟合,为了避免过拟合,可以引入正则项。
下图中,红线是test error,蓝线是training error,横轴是模型复杂度或迭代次数。直线是方差偏差均衡点。灰色虚线之后红线开始上升就说明模型开始过拟合了。
加上正则项:−∑i=NClog(exp(Wk(i)⋅x(i))∑c=1Cexp(Wc⋅x(i)))+λ∑k=1C⋅d+∣V∣⋅dθk=12-\sum_{i=N}^{C}log\left ( \frac{exp(W_{k(i)} \cdot x^{(i)})}{\sum_{c=1}^{C} exp(W_{c} \cdot x^{(i)})} \right ) + \lambda \sum_{k=1}^{C\cdot d+\left | V \right |\cdot d}\theta _{k=1}^{2}−i=N∑Clog(∑c=1Cexp(Wc⋅x(i))exp(Wk(i)⋅x(i)))+λk=1∑C⋅d+∣V∣⋅dθk=12
Word Window 分类
假设我们有一个中心词,一个长度为2的对称窗口
ddd是词向量的维度。
我们按下面的形式将x(i)x^{(i)}x(i)替换为xwindow(i)x_{window}^{(i)}xwindow(i):
xwindow(i)=[x(i−2)x(i−1)x(i)x(i+1)x(i+2)]x_{window}^{(i)}=\begin{bmatrix}x^{(i-2)}\\ x^{(i-1)}\\ x^{(i)}\\ x^{(i+1)}\\ x^{(i+2)}\end{bmatrix}xwindow(i)=⎣⎢⎢⎢⎢⎡x(i−2)x(i−1)x(i)x(i+1)x(i+2)⎦⎥⎥⎥⎥⎤
接下来就是计算损失函数,分类函数使用softmax函数,则损失函数使用交叉熵损失函数:J(θ)=1N∑i=1N−log(efyi∑c=1Cefc)J(\theta )=\frac{1}{N}\sum_{i=1}^{N}-log\left ( \frac{e^{f_{yi}}}{\sum_{c=1}^{C}e^{f_{c}}} \right )J(θ)=N1i=1∑N−log(∑c=1Cefcefyi)
使JJJ对xxx求导,这里的xxx是一个窗口里的拼接向量:
于是更新词向量:
以及权重矩阵:
神经网络
以上是使用softmax函数进行简单分类,但这种分类方式只能分类线性可分的数据,遇到非线性可分的数据就显得很乏力了,此时就需要使用神经网络来构建模型。
神经网络可以提供非线性的决策边界,理论上,神经网络可以拟合任何函数:
从逻辑斯谛回归到神经网络,每个神经元是一个二分类逻辑斯谛回归单元,神经网络同时运行多个逻辑斯谛回归,但不需要提前指定它们具体预测什么
前向传播
首先有一个简单的神经网络
输入是一个窗口大小为555,词向量大小为444的拼接向量,总维度是202020,隐藏层包含888个神经元,因此权重矩阵的维度是8×208 \times 208×20。神经元的激活函数采用sigmoid函数:a=11+exp(−(wTx+b))a=\frac{1}{1+exp(-(w^{T}x+b))}a=1+exp(−(wTx+b))1
对于神经网络模型来说,我们需要一个优化目标,也就是最大间隔目标函数。
假设scs_{c}sc是误分类样本得分,sss是正确分类样本得分,我们想要sss比scs_{c}sc更大,就是最大化s−scs-s_{c}s−sc或者最小化sc−ss_{c}-ssc−s,最简单的想法是只要求正确分类的得分高于错误分类的得分即可,并不要求错误分类的得分多么多么小。这得到间隔最大化目标函数:
minimizeJ=max(sc−s,0)minimizeJ=max(s_{c}-s,0)minimizeJ=max(sc−s,0)
但这种方法有风险,它没有创造一个安全的间隔,对优化函数进行修改:minimizeJ=max(Δ+sc−s,0)minimizeJ=max(\Delta +s_{c}-s,0)minimizeJ=max(Δ+sc−s,0)
对这个间隔进行修正可以使其为1,最终得到:
minimizeJ=max(1+sc−s,0)minimizeJ=max(1 + s_{c}-s,0)minimizeJ=max(1+sc−s,0)
上述两个得分可以按照前面的公式计算得出,sc=UTf(Wxc+b)s_{c}=U^{T}f(Wx_{c}+b)sc=UTf(Wxc+b),s=UTf(Wx+b)s=U^{T}f(Wx+b)s=UTf(Wx+b),负例通常通过负采样算法得到。
反向传播
令△w(k)=[δ1(k+1)a1(k)δ1(k+1)a2(k)⋯δ2(k+1)a1(k)δ2(k+1)a2(k)⋯⋮⋮⋱]=δ(k+1)a(k)T\bigtriangleup w^{(k)}=\begin{bmatrix}
\delta _{1}^{(k+1)} a_{1}^{(k)}& \delta _{1}^{(k+1)} a_{2}^{(k)}& \cdots\\
\delta _{2}^{(k+1)} a_{1}^{(k)}& \delta _{2}^{(k+1)} a_{2}^{(k)}& \cdots\\
\vdots & \vdots & \ddots
\end{bmatrix}=\delta^{(k+1)}a^{(k)T}△w(k)=⎣⎢⎢⎡δ1(k+1)a1(k)δ2(k+1)a1(k)⋮δ1(k+1)a2(k)δ2(k+1)a2(k)⋮⋯⋯⋱⎦⎥⎥⎤=δ(k+1)a(k)T
其中,δ(k)\delta^{(k)}δ(k)为第k层的误差。
由于∂J∂s=−∂J∂sc=−1\frac{\partial J}{\partial s}=-\frac{\partial J}{\partial s_{c}}=-1∂s∂J=−∂sc∂J=−1,所以我们可以只考虑∂s∂x\frac{\partial s}{\partial x}∂x∂s
∂s∂xj=∑i∂s∂ai∂ai∂xj=∑i∂UTa∂ai∂ai∂xj=∑iUi∂f(Wi⋅x+b)∂xj=∑iUif′(Wi⋅x+b)∂Wi⋅x∂xj=∑iδiWij=W⋅jTδ\begin{aligned}
\frac{\partial s}{\partial x_{j}} &= \sum_{i}^{}\frac{\partial s}{\partial a_{i}}\frac{\partial a_{i}}{\partial x_{j}}\\
&= \sum_{i}^{}\frac{\partial U^{T}a}{\partial a_{i}}\frac{\partial a_{i}}{\partial x_{j}}\\
&= \sum_{i}^{}U_{i}\frac{\partial f(W_{i\cdot }x+b)}{\partial x_{j}}\\
&= \sum_{i}^{}U_{i}{f}'(W_{i\cdot }x+b)\frac{\partial W_{i\cdot }x}{\partial x_{j}}\\
&= \sum_{i}^{}\delta _{i}W_{ij}\\
&= W_{\cdot j}^{T}\delta
\end{aligned}∂xj∂s=i∑∂ai∂s∂xj∂ai=i∑∂ai∂UTa∂xj∂ai=i∑Ui∂xj∂f(Wi⋅x+b)=i∑Uif′(Wi⋅x+b)∂xj∂Wi⋅x=i∑δiWij=W⋅jTδ
所以,整个向量的偏导数就为∂s∂x=WTδ\frac{\partial s}{\partial x}=W^{T}\delta∂x∂s=WTδ