Machine Learning Chinese NLP :::: Unrolling Parameters - Chad Salinas ::: Data Scientist
Use Slidify to create motion charts to share with the world on rPubs Chad Salinas or GitHub.
Slidify, rPubs Chad Salinas, Motion Charts, Hans Rosling
1276
post-template-default,single,single-post,postid-1276,single-format-standard,qode-listing-1.0.1,qode-social-login-1.0,qode-news-1.0,qode-quick-links-1.0,qode-restaurant-1.0,ajax_fade,page_not_loaded,,qode-title-hidden,qode_grid_1300,qode-theme-ver-12.0.1,qode-theme-bridge,bridge,wpb-js-composer js-comp-ver-5.4.2,vc_responsive
a

Machine Learning Chinese NLP :::: Unrolling Parameters

Unrolling Parameters

在之前的视频中,我们谈到了
如何使用反向传播

以计算损失函数的导数
在这个视频中
我想快速地告诉你们一个
关于把系数从矩阵
展开到向量的实现细节
我们需要它实现高级的优化

具体来说
假设你实现了一个损失函数
它的输入是这些参数theta
然后返回损失函数和导数

接着你可以把它
传递给一个高级的优化算法fminunc
顺便说一下
fminunc不是唯一的方法
也有其它的高级优化算法

但所有这些算法做的
都是把这些输入
包括损失函数的指针
和theta的初始值

另外呢
这些做法假设
theta的初始值
是系数向量
也许是Rn或者Rn+1
但这些是向量
它也假设
这些代价函数会返回
第二个返回值
这个梯度
它也是Rn或者Rn+1 也是向量
我们在做逻辑回归时
它很有效
但我们在使用神经网络
我们的系数
不再是向量了
而是矩阵
对于一个完全的神经网络
它有这些系数矩阵theta1 theta2 theta3
我们在Octave中会写成
这些矩阵theta1 theta2 theta3
相似地
我们期待它返回的梯度项
嗯我们在之前的视频中
展示了如何去计算
这些梯度矩阵
也就是D1 D2
D3
我们在octave中可以写成 矩阵D1 D2 D3

在这个视频中
我想快速地告诉你们
如何展开这些矩阵
把它们展开成向量
所以它们最后
能变成一个
适合作为这里的theta输入
以得到梯度的格式

具体来说
假设我们有一个神经网络
它有一个有10个单元的输入层
10个单元的隐藏层
一个只有1个单元的
输出层
所以s1是第一层的单元数
s2是
第二层的单元数
s3是第三层的单元数
在这个例子里
矩阵theta D的
尺寸
会由这些表达式给出
举个例子
theta是一个10*11的矩阵 以此类推

所以在octave中
如果你想
转化为向量
你可以做的是
把theta 1 theta 2
theta 3
写成这样
它会把你这三个矩阵的
所有元素
把theta1
theta2
theta3的所有元素
都提取出来
然后展开
把所有元素放进一个很长的向量

就是thetavec

同样地 第二个命令
会把所有的D矩阵
展开成
一个长向量
称为DVec
最后如果你想
由向量转换成矩阵

假设你想
重新得到theta1
你可以从thetavec中
提出前110个元素
所以theta1有
110个元素
因为它是10*11的矩阵
所以这样提出前110个元素
然后你就可以
使用reshape命令把它重新变成theta1
相似地
要得到theta2
你提出接下来的110个元素 然后重塑它
对于theta3
你提出最后11个元素
然后运行reshape以得到theta3
Chad Salinas working on Plotly

Chad Salinas working on analytics project.

Chad Salinas late nighter
这是整个流程的octave演示代码
所以在这个例子里
把theta1设置成
10*11矩阵 元素是1
所以它是一个全是1的矩阵
为了看起来更方便
把theta2设成
2乘上10*11全1矩阵
也把theta3
设置成
3乘1*11全1矩阵
所以这是
3个不同的矩阵 theta1 theta2 theta3
我想把它们变成向量
thetavec等于
theta1 theta2

theta3
好了 这中间有一个分号
就像这样

现在thetavec
是一个很长的向量
它有231个元素

如果我展示它
我会发现这是一个很长的向量
它包含第一个矩阵的所有元素
第二个矩阵的所有元素
第三个矩阵的所有元素

如果我想重新得到
最初的矩阵
我可以reshape thetavec

让我们提出前面的110个元素
然后重塑成10*11的矩阵

这就是theta1
如果我再
拿出接下来110个元素
所以标号是111到220
我得到了所有的2

如果我再

从221到最后一个元素
也就是
地231个元素
然后重塑成1*11 我得到theta3

为了让这个过程很清晰
我介绍一下我们是如何
用这个展开的方法实现学习算法的

假设你有一些
系数的初始值
theta1 theta2 theta3
我们要做的是
把它们展开
变成一个长向量
我们会把这些初始的theta
传递给fminunc
作为这些theta的初始值

我们还需要做的是 实现损失函数

这里是我的实现

损失函数会
需要输入thetavec
它就是一个
被展开的向量
包含了所有的系数向量

所以首先我会
我会用thetavec
然后用reshape函数
我从thetavec中
提取出元素 然后用reshape
以得到
最初的系数矩阵theta1 theta2 theta3
所以我得到的是矩阵
所以这是一个
更方便的形式
以使用这些矩阵
所以我可以计算前向传播
以及反向传播
以计算导数和损失函数

最终
我可以把导数展开
以保持元素
和展开theta时顺序一致
但我会展开d1 d2
d3 以得到gradientvec
这是损失函数返回的
它返回的是这些导数的向量

所以我希望
你们现在能明白如果
来回地转换
矩阵形式的
系数和向量形式的系数

矩阵形式的
优点在于
当你的系数以矩阵形式存储时
计算前向传播和反向传播
会更方便
当你使用
某种向量化的实现时
使用矩阵形式
会更简单

相对的是
向量形式的优点
类似thetavec dvec
是当你使用高级的优化算法时
这些算法倾向于
假设
你的所有系数展开在了一个长向量中
这样的话
就像我们刚做的
希望你也能在二者之间转换

Let the dataset change your mindset

– Hans Rosling
No Comments

Sorry, the comment form is closed at this time.