2020.3.20笔记 如何手动求解矩阵梯度以及基于梯度下降法的Tensorflow的图片分类思想

**

此文章仅作为博主学习过程中的理解记录,若有问题欢迎指出

**
我们在上篇文章里已经讲过了如何利用梯度下降法来求解二元一次回归。
上篇文章中我们利用了梯度下降法以及f(x) = wx + b 的形式来求解二元一次回归,那么我们怎样通过类比来讲这种方法转移到矩阵上呢?
在这里插入图片描述
举个例子,如果有张图片是由28×28个像素点构成,那么我们便称这张图片的大小为28×28。首先,我们将这个28×28的矩阵降维成1
(28×28)大小,如果我们有N张图片,那么便将这N ×784个 排列成N×784大小的矩阵。
在这里插入图片描述

假如我们要做的是给图中的数字图形进行分类,判断图中的数字属于0到9中的哪个数字,那么我们便需要得出来10个概率,其中概率最大的数字便极大可能是图中的数字。所以,我们如果需要给N个图像分类,那么我们便需要一个N×10大小的矩阵。
怎么求解图片的概率呢?我们一直通过梯度下降法来找到LOSS最小的w和b,且这时为N×大小即可
但我们现在只有一个N×784大小的矩阵,其中包含着N个图像的信息。
这里我们采用将图像矩阵降维的方法。
首先我们明确的事简单的形如out = (w @ x + b)的线性变换是不满足图片分类的复杂性的,并且一般都是通过多次变换才能最终找到最为合适的LOSS最小的w和b
out = (w3 @ (w2 @ (w1 @ x + b1) + b2) + b3)才更为合理
在这里插入图片描述
在此例中,我们拥有N×784的矩阵,我们需要N×10的矩阵。假如w1初始化为784×512的矩阵,b1为[512].这样w1 @ x + b结果就是N×512大小的矩阵,依次降维,这样便可得出最终需要的N×10大小的矩阵。我们需要注意的是在运算出来每一个结果的过程中,概率为负数显然是很不合理的,所以我们需要把小于0的等于0,大于0的不变,这样才算是合理的概率。并且在此例中初始化第一次运算的w和b的时候,一般w按照正态分布,b初始化为0较为妥当。运算过程中降维依赖w的更新,而w的更新则依赖于矩阵的梯度。

在Tensorflow中我们可以使用以下两条语句来实现梯度的自动求解与w的自动更新。
在这里插入图片描述

**

那么我们怎么样才能手动求解梯度呢?

**

比如一个矩阵为 Y = XTX
X=[[0.],
[1.],
[2.],
[3.]]
那么我们能求出来Y= 28,那么梯度怎么计算呢?
我们先让第一行的元素加1,那么变为
X=[[1.],
[1.],
[2.],
[3.]],此时Y= 30, 所以D= 30-28 =2,那么A1= 2/1 =2
再让第二行加一
X=[[0.],
[2.],
[2.],
[3.]],此时Y= 34 所以D= 34-28 =6,那么A2= 6/1 =6
以此类推,我们求出这个点的矩阵梯度是

[[2.],
[6.],
[10.],
[14.]]

发布了4 篇原创文章 · 获赞 5 · 访问量 202

猜你喜欢

转载自blog.csdn.net/qq_15534667/article/details/104999980