机器学习常用数学公式

来源:互联网 发布:手机淘宝开店怎么注册 编辑:程序博客网 时间:2024/05/29 08:31

reconstruction error

xyzy是被污染的xz是从y中试图对x进行的重构。如何度量重构的好坏,此时就要用到重构误差,也即reconstruction error。

重构误差可通过多种方式进行度量,度量方式的选择取决于给定映射(也即编码code)下关于输入的分布的假设。

  • 传统的平方误差:

    L(x,z)=xz2

  • cross-entropy

    LH(x,z)=k=1dxklog(zk)+(1xk)log(1zk)

常见向量导数

对于一个p维向量xRp,函数y=f(x)=f(x1,,xp)R(比如向量的内积运算),则y关于x的导数为:

xf(x)=fx1fx2fxpRp

对于一个p维向量xRp,函数y=f(x)=f(x1,x2,,xp)Rq(如(Aq×pxp×1)q×1

xf(x)=f1x1f1xpf2x1f2xpfqx1fqxpRp×q

所以有:

Axx=βT1βT2βTmx=βT1xβT2xβTmx=[β1,β2,,βm]=AT

xTAx=xT[α1,α2,,αn]=[xTα1,xTα2,,xTαn]=[α1,α2,,αn]

范数求导

线性回归(linear regression)的损失函数(loss function):

L=minw12YXw22

其中YN×1,XN×(d+1),w(d+1)×1,想求得最小化时的权值向量w,此时需要求解损失函数L对权值向量w的导数:

Lw=XT(YXw)

从形式上看,对二范数的平方(一个标量)求导得一个向量。最优权值向量w,也即是Lw=0时的w,也即wLin=(XTX)1XTY=XY

其实范数的本质是一个函数,也即是一种矢量向标量的映射,例如,我们可以将其看做12f(x)2,其对x的导数为f(x)f(x)

按位运算,值到值映射的求导

给定一个函数f(x)的输入是标量x,对于一组K个标量x1,x2,,xK,通过f(x)得到另外一组K个标量z1,z2,,zK,

zk=f(xk),k=1,2,,K

为简单起见,我们定义x=[x1,x2,,xK]T,z=[z1,z2,,zK]T

z=f(x)

f(x)是按位(element-wise)运算,即(f(x))i=f(xi)

如果将f(x)的导数记为f(x),当这个函数的输入为K维向量x=[x1,x2,,xK]时,其导数为一个对角矩阵:

f(x)x=[f(xj)xi]K×K=f(x1)000f(x2)000f(xk)

比如RNN网络,ht=f(Uht1+Wxt+b)hihi1=UTdiag[f(hi1)]

softmax

P(Y=i|x,W,b)=softmaxi(Wx+b)=eWix+bijeWjx+bj

这里P(Y=i|x,W,b)表达的是class-membership probabilities(这种类属概念只在多分类问题multi-class classification中才会出现)。其中Wn_in×n_out表示权值矩阵,Wj表示权值矩阵的每一列(1jn_out),这里得到的Y=ii表示类别)与输入样本的真实的样本label值无关,这里纯做预测。所以有:

ypred=argmaxiP(Y=i|x,W,b)

对应的代码形式为:

self.p_y_given_x = T.nnet.softmax(T.dot(self.input, self.W)+self.b)        # self.p_y_given_x:当前输入x下的x属于各个类别的概率        # self.input => (n*n_in)        # self.W => (n_in*n_out)        # self.b => (n_out)        # 所以当做完矩阵乘法的动作,然后进行相加时((n*n_out)+(n_out,))        # 会对self.b进行broadcast,也即在列的方向上,拷贝拓展n份,构成一个(n*n_out)的矩阵,然后进行的相加self.p_pred = T.argmax(self.p_y_given_x, axis=1)

对数似然函数

L(θ={W,b},D)=i=0|D|log(p(Y=y(i)|x(i),W,b))(θ={W,b},D)=L(θ={W,d},D)

θ={W,b}表示参数集,D表示样本集,|D|表示样本集的基数(cardinal number,也即样本的个数,X.shape[0](numpy))。

上式表示多分类问题的对数似然函数。下式是作为损失函数(loss function)的似然函数(negative log likelihood)。

反映在代码中,其实十分简洁:

def loss_function(self, y):    return -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y])

在取和式的同时顺便又一个取均值的动作。

sigmoid

sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在:

σ(z)=11+exp(z)=1+tanh(z/2)2

tanh(z)=exp(z)exp(z)exp(z)+exp(z)=2σ(2z)1


这里写图片描述

值域分别是σ(z)(0,1)tanh(z)(1,1)

它们各自的导数分别为:

σ(z)=σ(z)(1σ(z))tanh(z)=1(tanh(z))2


这里写图片描述

值域分别是:σ(z)(0,0.25],tanh(z)(0,1]

源代码请见sigmoid_tanh_prime

softmax

数学上,输入向量x属于类别i的概率,记为随机变量Y,其数学形式如下:

P(Y=i|x,w,b)=softmaxi(Wx+b)=eWxi+bjeWxj+b

与之相对应的模型进行类别的预测时:
y_pred=argmaxiP(Y=i|x,w,b)

多元高斯密度函数(Multivariate Gaussian Density)

p(x⃗ )exp[12(x⃗ μ⃗ )TΣ1(x⃗ μ⃗ )]

where μ⃗  is an N-dimensional vector position of(注意这里的通用表达) the mean of the density and ΣN×N的协方差矩阵。

0 0
原创粉丝点击