您的位置:首页 > 其它

机器学习 笔记(二) Multi-class classification

2016-04-12 21:08 316 查看
刚刚学了Andrew Ng在Coursera上的Machine Learning公开课,感觉在学习的过程中,有一些疑惑,尤其是各种算法之间的联系,以及在模型训练中遇到的普遍性的注意点,这里做一个回顾和总结。

Multi-class classification problem

案例:数字识别(0,1,2,…,9),待识别的数字图片如下所示,



Q1. 如何将数字的图像转变为向量?

A1.

1) 如果图片是20 pixel*20 pixel的数字灰度图像,可以取每个像素为基本单元,将每个单元灰度级用一个浮点数表示(0~1)。再将20*20的像素展开(unroll)为1个400维度的向量。

2)如果是RGB图像,每个像素用三个8位的数(0~255)表示,分别代表红、绿、蓝的强度(intensity)。

问题描述:特征为X,输出为y,要学习的参数为theta。

方法1. Logic regression algorithm

用逻辑回归算法,只需依次令y=k(0,1,2…9),将数字识别变成0-1分类问题,依次学习每个数字对应的参数,伪代码如下

for k=1:num_labels
[theta] = fmincg (@(t)(lrCostFunction(t, X, (y == k), lambda)),initial_theta, options);
all_theta(k,:) = theta';
end


方法2. Neural network algorithm

用神经网络算法,重点在于特征维度设计、特征选取,神经网络模型的设计(几层,几个隐藏单元),模型如下:



输入单元为400+1维,隐藏层为25+1维,输出层为10维,神经网络算法执行步骤如下:

a) Forward propagation -> Cost function

b) Back propagation– Grad

c) Gradient checking 保证grad计算正确,但是此步骤之后,记得注释掉该功能,防止它拖慢程序速度

d) Optimization 用梯度下降方法或者其它先进方法去最优代价函数

e) Regularization调整lambda项

参数theta随机初始化

注意:symmetric breaking 问题,如果theta初始化时每个分量都相同,那么神经网络的同一层的各个单元输出(激励输出)也相同,模型训练无法进行。

如何初始化Theta? 方法如下:

Theta = rand(L_out, 1+L_in)*2*epsilon_init - epsilon_init ,

theta在[-epsilon_init, epsilon_init]上随机变化

如何选择epsilon_init? 一个有效的方法是令



epsilon_init的选择基于神经网络中与Theta相邻层的单元数,L_in=Sl输入单元的单元数,L_out=Sl+1,输出单元的单元数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: