博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
吴恩达机器学习神经网络篇——矩阵与向量之间的转换
阅读量:3959 次
发布时间:2019-05-24

本文共 5022 字,大约阅读时间需要 16 分钟。

Advanced optimization

function [jVal, gradient] = costFunction(theta)...optTheta = fminunc(@costFunction, initialTheta, options)

:gradient ∈ R n + 1 \in{R^{n+1}} Rn+1,theta, initialTheta ∈ R n + 1 \in{R^{n+1}} Rn+1 均为向量。

例如:

Neural Network(L=4):
Θ ( 1 ) , Θ ( 2 ) , Θ ( 3 ) \Theta^{(1)},\Theta^{(2)},\Theta^{(3)} Θ(1),Θ(2),Θ(3) - matrices( Theta1, Theta2, Theta3)
D ( 1 ) , D ( 2 ) , D ( 3 ) D^{(1)},D^{(2)},D^{(3)} D(1),D(2),D(3) - matrices( D1, D2, D3)
Unroll” into vectors
神经网络图

Example

s 1 = 10 , s 2 = 10 , s 3 = 1 s_1=10,s_2=10,s_3=1 s1=10,s2=10,s3=1

Θ ( 1 ) ∈ R 10 × 11 , Θ ( 2 ) ∈ R 10 × 11 , Θ ( 3 ) ∈ R 1 × 11 \Theta^{(1)}\in{R^{10\times{11}}},\Theta^{(2)}\in{R^{10\times{11}}},\Theta^{(3)}\in{R^{1\times{11}}} Θ(1)R10×11,Θ(2)R10×11,Θ(3)R1×11
D ( 1 ) ∈ R 10 × 11 , D ( 2 ) ∈ R 10 × 11 , D ( 3 ) ∈ R 1 × 11 D^{(1)}\in{R^{10\times{11}}},D^{(2)}\in{R^{10\times{11}}},D^{(3)}\in{R^{1\times{11}}} D(1)R10×11,D(2)R10×11,D(3)R1×11

矩阵表达式 ⇐ ⇒ \Leftarrow\Rightarrow 向量表达式

向量合并

>>thetaVec = [Theta1(:); Theta2(:); Theta3(:)];	% 将三个Theta合并为一个长的列向量>>DVec = [D1(:); D2(:); D3(:)];	% 将三个偏导数D合并为一个长的列向量

向量拆分

>>Theta1 = reshape(thetaVec(1:110),10,11); % 将长的列向量分为Theta1、Theta2、Theta3>>Theta2 = reshape(thetaVec(111:220),10,11);>>Theta3 = reshape(thetaVec(221:231),1,11);
>> Theta1 = ones(10,11)Theta1 =     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1>> Theta2 = 2*ones(10,11)Theta2 =     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2>> Theta3 = 3*ones(1,11)Theta3 =     3     3     3     3     3     3     3     3     3     3     3>> thetaVec = [Theta1(:); Theta2(:); Theta3(:)];>> size(thetaVec)ans =   231     1>> reshape(thetaVec(1:110), 10,11)ans =     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1     1>> reshape(thetaVec(111:220), 10,11)ans =     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2     2 >> reshape(thetaVec(221:231), 1,11)ans =     3     3     3     3     3     3     3     3     3     3     3

矩阵表达式的优点:更容易实现前向传播和反向传播,便于向量化的实现。

向量表达式的优点:便于高级算法的实现,高级算法常要求将Theta和D转化为长矩阵形式,如thetaVec,DVec。

Learning Algorithm

Having initial parameters Θ ( 1 ) , Θ ( 2 ) , Θ ( 3 ) \Theta^{(1)},\Theta^{(2)},\Theta^{(3)} Θ(1),Θ(2),Θ(3).

Unroll to get initialTheta to pass to

fminunc(@costFunction, initialTheta, options)
function [jVal, gradientVec] = costFunction(thetaVec)

From thetaVec, get Θ ( 1 ) \Theta^{(1)} Θ(1), Θ ( 2 ) \Theta^{(2)} Θ(2), Θ ( 3 ) \Theta^{(3)} Θ(3).

利用前向传播/反向传播算法计算 D ( 1 ) D^{(1)} D(1), D ( 2 ) D^{(2)} D(2), D ( 3 ) D^{(3)} D(3)以及 J ( Θ ) J(\Theta) J(Θ).
Unroll D ( 1 ) D^{(1)} D(1), D ( 2 ) D^{(2)} D(2), D ( 3 ) D^{(3)} D(3) to get gradientVec.

注意:保持顺序一致。


  1. 利用reshape函数

转载地址:http://fumzi.baihongyu.com/

你可能感兴趣的文章
AJAX应用之注册用户即时检测
查看>>
File 类小结
查看>>
java除去字符串空格
查看>>
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>
洛谷P1638 逛画展(双向队列)
查看>>
POJ2892,Tunnel Warfare(线段树维护连续区间)
查看>>
POJ3468,A Simple Problem with Integers(线段树-区间查询-区间更新)
查看>>
杭电ACM——6463(思维)
查看>>
杭电ACM——1061,Rightmost Digit(思维)
查看>>
杭电ACM——1087,Super Jumping! Jumping! Jumping!(DP)
查看>>
杭电ACM——fatmouse's speed(DP)
查看>>
杭电ACM——毛毛虫(DP)
查看>>