機器學習-筆記5

時間有點空,就把還沒updata的編程練習拿來作了(coursera上一期的課程做業)算法

神經網絡,確實不是很好理解,可是磕磕絆絆仍是完成了,回頭再看看《機器學習》上比較系統的定義編程

以及《集體智慧編程》上搜索引擎章節的一個神經網絡樣例,我也算從門縫看了一眼屋內的精彩世界吧網絡

廢話就很少說了app

樣例仍是上一個exercise的數字手寫識別,不一樣的是此次用neural network來進行學習機器學習

neural network的關鍵(至少是我目前學到的關鍵)是Back propagation(反向傳播)ide

與之相應的是正向傳播,便是知道Theta後進行predict的過程,而這個過程在neural network的學習中也是很重要的wordpress

(neural network最基礎的就不解釋了,什麼layer,perceptron……,畢竟這是筆記。。)函數

下圖正向傳播過程(相對要好理解一些,也比較簡單)oop

下圖是反向傳播過程,底部是相關公式(簡單吧,但是實現起來就很麻煩了,主要緣由仍是由於我是新手!)學習

整個練習的主要文件時nnCostFunction.m,但算法過程是一步一步實現的,記住是honor code,在上課的童鞋就不要Ctrl+C了

另:用了loop,由於「

We recommend implementing backpropagation using a for-loop

over the training examples if you are implementing it for the

first time.

」大神些就先別吐槽了

首先是下面這個公式的前半部分(沒有進行regularization 的部分),J是costfunction用來衡量學習出來的和樣例的匹配程度

 

X=[ones(size(X,1),1) X];
a2=(sigmoid(X*Theta1'));
a2=[ones(size(a2,1),1) a2];
h=sigmoid(a2*Theta2');
J=0;
for k=1:num_labels
	y_temp=(y==k);
	h_temp=h(:,k);
	J=J-(y_temp'*log(h_temp)+(1-y_temp)'*log(1-h_temp));
end
J=J/m;
加上regularization 以後:
J=J+lambda/2/m*(sum(sum(Theta1.*Theta1))+sum(sum(Theta2.*Theta2)));
 
而後就是一個大loop對每一個樣例進行以下的一個過程:
1.正向傳播:
   z2=X(t,:)*Theta1';
   a2=(sigmoid(z2));
   a2=[1 a2];
   z3=a2*Theta2';
   a3=sigmoid(z3);
   [lp,p]=max(a3, [], 2);
   y_temp=[1:num_labels]==y(t);
2.反向傳播:
   Delta3(t,:)=a3-y_temp;
   z2=[0 z2];
   Delta2_temp=Delta3(t,:)*Theta2.*sigmoidGradient(z2);
   Delta2_temp(1)=[];
   Delta2(t,:)=Delta2_temp;
3.統計gradient,用以下公式
   DDDelta1=DDDelta1+Delta2(t,:)'*X(t,:);
   DDDelta2=DDDelta2+Delta3(t,:)'*a2;
其實光給個公式和代碼有些不厚道,但詳細的一時半會也說不清楚
代碼中有不少的細節須要本身去一步步實踐才能體會到,好比對Delta3和Delta2的表示格式
只有真正去實現一次,你才能對neural network有更深的瞭解
 
 最後在loop外根據
獲得相應的grad,再用fmincg函數進行學習,迭代次數50次爲宜
 算法跑起來那是至關慢,因此爲何迭代次數50次就差很少了,最後試了一下400次,跑了估計得有20分鐘,待會會給個結果的
有時間我會進行矩陣化,到時候可能會快不少吧,即便50次到如今也已經跑了快5分鐘了。。。。。等等。。
下面是hidden layer的可視化結果(50次),根本看不出規律,這就是neural network的奇妙之處
50次的識別率爲95.68%,由於隨機的選擇,可能會有1%之內的偏差,可見識別率已是至關高了
那麼400次的結果如何呢:下面是400次的hidden layer可視化結果:可見變化的確是有,只是人爲沒法識別
神經網絡產生的東西,每每人是難以理解的
識別率如何呢,高達
但我感受這個已經overfit了,對新的測試樣例表現可能不如50次的結果了
 
第一個neural network,說實話,收穫不少,嗯,加油!
相關文章
相關標籤/搜索