Datamatrix X: size为[N*D],N为样本量,D为维数。
【注】按照之前Wx的写法,x应该是[D*N],可能是为了程序中矩阵操作方便,一般都xW这么写。
Meansubtraction:每一个维度减去该维度的所有样本的均值,即X的每一列求一个均值,每一列的所有数据减去对应均值,X -=np.mean(X, axis = 0)。但在图像领域,为了方便所有数据都减去整体的均值,即X-= np.mean(X)。
Normalization标准化:同样对每个维度分别进行标准化,即 X/= np.std(X, axis = 0 。但对于图像来说,每一维度都是0~255,因此没有标准化的必要。
PCA:
cov = np.dot(X.T, X) / N #计算协方差矩阵
U,S,V =np.linalg.svd(cov) #SVD分解
【注】使用SVD分解目的在于得到特征向量矩阵,且其中的特征向量是按照对应特征值的大小排序的,所以要是用常规方法慢慢求特征值和特征向量也是一样的。
Xrot =np.dot(X, U) #将元数据投影到特征向量基上,当然我们需要的并不是全部信息
Xrot_reduced= np.dot(X, U[:,:100]) #只投影到前100个基,其余基忽略,由于是按特征值从大到小排序的,所以也就是留下最主要的100个特征向量上的投影,故名PCA主成分分析。
(个人)直观解释:1,协方差矩阵表达了数据不同维度间的相关性;2,协方差矩阵的特征向量们表达了维度间相关关系的模式,且各特征向量表达的模式是相互独立的,如上图数据的一个特征向量大约为(1, 2)/ √5 ,因为数据的分布趋势大致就是沿着这个方向。那么为什么协方差矩阵的特征向量会有这个效果,查了一些百度知乎都没有对此做回答,大多搬出了变换矩阵的特征向量的几何意义,但没有说明一个协方差矩阵是如何关联到变换矩阵上去的,所以只好自己换个思路做了下推导:首先,直观上的数据的分布趋势用数学来表达就是,数据在某一方向上的投影有最大的方差,投影即点乘单位向量,(方差省略了分母)
于是问题变为,
求最值自然要求导,但是并非令导数为0。由于v是一个单位向量,其末端只能沿切向运动,所以这个最值是切向方向上的一维优化问题。而我们求的导数是2维的,所以只需要另导数的切向部分为0即可,即导数平行于法向,即v,
显然,λ是协方差矩阵cov的特征值,v是特征向量,再代回方差,
λ、v有多组,但至此显然应取特征值最高的一组,且特征值就是数据在该特征向量方向上的方差。接下来再寻找第二个特征向量,过程就类似了。找完所有特征向量组成一组基底,也就是特征向量矩阵U。3,X点乘U,把数据投影到基底上,直观上就是把数据分布给摆正了,如下图中的decorrelateddata。
最后提取主成分,把没什么方差的维度给压缩、拍扁,如图,二维的数据变成一维的数据了。另外,CNN中不用PCA。参考 https://en.wikipedia.org/wiki/Principal_component_analysis。
Whitening:把decorrelated date标准化,如图。即每个维度分别除以方差(即特征值)的平方根。Xwhite= Xrot / np.sqrt(S + 1e-5)
【?】作为绘画爱好者,马上想到,用PCA处理大量的名画,从特征向量里就可以学习到构图(笑)。
Smallrandom numbers:如W = 0.01*np.random.randn(D,H)。不能初始化为全0,因为如果都一样,反向传递时梯度也就一样,于是就永远一样了。所以需要小的随机数来促使产生“分化”。
Calibratingthe variances:按上面方法初始化的一个神经元,输出的方差是输入方差之和,即和输入数有关。因此把这些输入的权重除以sqrt(输入数)。若对反向传递进行同样的考虑,则除数为sqrt((nin+nout)/2),参考https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf。针对ReLU,一种常用的除数为sqrt(n/2),参考https://arxiv.org/abs/1502.01852。
Sparseinitialization:为使各神经元输出方差相同,不是调整权重,而是使每个神经元的输入数相同。
Initializingthe biases:可以全0。或一个正的小数来使ReLU处在有斜率的区域。
Regularization
L2 regularization:使W分布分散(所有元素都是比较小的数,趋于平均),考虑所有输入的影响,因此泛化能力好。
L1 regularization:使W分布稀疏(主要输入权重大,其他权重趋于0)。
Max normconstraints:每一个神经元的权重w的模有上限。当learning rate过高时防止爆炸。
Dropout:每一次训练,每一个神经元有一定概率dropout,即输出强制为0,相当于临时删去了这些神经元。测试时,使用网络时则不使用dropout而用整个网络。测试时输出的期望与训练时是不同的,若p=0.5,则每次只有一半的网络参与训练,测试时神经元输出会变为2倍。因此需要在测试时,另每个神经元输出乘上p。或者不动测试的神经元,而是在训练时修正(除以p)。
we showthat the dropout regularizer is first-order equivalent to an L2 regularizerapplied after scaling the features by an estimate of the inverse diagonalFisher information matrix (https://papers.nips.cc/paper/4882-dropout-training-as-adaptive-regularization.pdf)
Theme ofnoise in forward pass:dropout的idea在于在训练时引入随机,测试时除去随机,以此提高泛化能力。在CNN中,使用这一idea的方法有stochastic pooling, fractional pooling 和data augmentation。
对不同类型的问题,需要不同形式的loss function。
Classification:可以用前面提过的SVM和Softmax。当类别数量很大时,可以用HierarchicalSoftmax,即类别是一颗树的叶节点,网络决定的是中间分支的概率,这样输出层的维数就下降到对数级别。
Attributeclassification:即一个输入对应了多个类别,如Instagram上图片的tags。则对每一些相互独立的类别分别建立网络。
Regression:预测实数值。则另网络输出实数,用L2 norm等衡量误差。
Reference:https://cs231n.github.io/neural-networks-2/