[ML] ex4 Neural Networks Learnin
1 Neural Networks
才以上到ex3的前向传播是用的现成的数据,并不是自己学习出来的。
1.1 Visualizing the data
5000 training examples
each training example is a 20 pixel by 20 pixel grayscale image which had been "unrolled" into a 400-dimensional vector
matrix X: 5000 by 400
vector y: 5000-dimensional (a "0" digit is labeled as "10")
1.2 Model representation
3 layers: an input layer,a hidden layer and an output layer
% Theta1 has size 25 x 401
% Theta2 has size 10 x 26
1.3 Feedforward and cost function
之前的cost function中,一个instance只有一个,vector y对每一个instance也只有一个值,就可以直接矢量相乘求出cost。
而现在这个多分类问题的cost function中有多个,可以看作一个向量,vector y对每一个instance也被矢量化,与K个一一对应,所以,就可以先求出这一个instance的K个的cost的和。然后用for loop把m个instances的cost累加。
向量化的好处就是不需要知道K是多少啊,直接乘就好了。
一次性向量化的方法我想到脑子宕机都想不出来。所以累加instance的时候,只能先用for loop了。
- y给定的形式是label,是一个数字,需要把它矢量化。
一开始没有矢量化,跑出来会出现10个cost值,还都不对。 - 不要忘记cost function里的log
每次就是光把两项乘起来就特别开心,然后忘记给h加log。
感觉自己写的矢量化思路特别清晰,比参考的几篇文章里绕来绕去的行列摆放都要好理解一些。
1.4 Regularized cost function
注意在归一化之前要去掉bias项Theta1_use=Theta1(:,2:end);
点乘平方可以这样写的thetasq1=Theta1_use.^2;
a=sum(x);%列求和
a=sum(x,2);%行求和
a=sum(x(:));%矩阵求和
2 Backpropagation
2.1 Sigmoid gradient
因为是两个矩阵相乘,用点乘完成g = sigmoid(z).*(1.0-sigmoid(z));
2.2 Random initialization
W = rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init;