先聊一聊
这篇文章所写的内容,全部是本人在网易云课堂上面,报了一门深度学习的课程,因为学了一圈下来,每天看视频,听课,发现学习到了后面,前面讲了啥,只有个印象了,真正讲一讲,说一说,到底学习到了什么,苦笑着。。。
借着CSDN的平台,记录一下自己的学习笔记,整理成文字,总比听一遍记得牢吧
下面聊正事,开始了
如标题所述,整理记忆一下,在机器学习也好,深度学习也罢,经常用到的,去寻找一个函数的最优值的算法
梯度下降算法(Gradient Descent)
首先,看一眼梯度的概念,也是先在理论背景知识上过去,因为任何的算法,都要有扎实可靠的理论作支撑的
梯度:
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
注:以上来源于百度百科
个人理解:
因为在本人考研的时候,要考数学一,所以就报了某数学考研辅导老师的课程,也是得益于这位有真才实学的好老师,因本人愚笨,学到多少数学知识,先不谈,最受益的就是他教会我的一些人生道理,下面是一点我依稀记得的他在课程上面的关于对梯度的解释
曰:梯度,要知道,这是一个向量,所谓向量,是一个有大小有方向的量,这也就印证了百度所说的第一句,梯度,明确是一个向量,有方向的
然后他表达的就是一个函数的某点,在此方向上,可以获得最大值,变化的最快
主菜上来了
正因为函数点在这个方向上是最大值,那么前面加一个负号,取相反数,不就是最小值的方向了吗,然后我们在定义一个学习率(Learn Rate),也就是每次朝着那个下降的方向,前进的步长,我们在迭代好多次,不就如愿能找到那个函数最小值了吗
以上在说什么,见代码,一看便知
上代码:
Step 1:定义损失函数(Loss Function):
def loss(w, b, point):
total_error = 0#初始化误差值
# 遍历每一个点,将每一个点的误差计算,并加和,且除以N(点的数量)
for i in range(len(point)):
x = point[i][0]
y = point[i][1]
total_error += (1/float(len(point))) * (((w*x + b) - y) ** 2)
return total_error
注:我们要求解最小值,即最优解,的那个函数,是我们自己人为定义的损失函数,形式多样,取决于实际场景
Step2:定义计算梯度函数并更新
def compute_Gradient(w, b, point, LearningRate):
w_Grad, b_Grad = 0, 0#初始化w,b梯度值
N = float(len(point))
for i