【深度学习】(一)梯度下降算、随机梯度下降原理公式+小练习
·
目录
梯度下降算法的引入:
1、以Linear Model为例 y=x*w
模型开始w是一个随机猜测,w=random value,
搜索的过程:就是要找一个w最适合数据集的w
目的:使得Σ(y^-y)²最小。
最直接的方法:将认为权重可能取值的区间w_list=[]表示出来,循环,每层循环求取一个loss(损失) loss最小的w最佳,例如
w_list=[]
mse_list=[]
for w in np.arange(0.0,4.1,0.1):
print('w=',w)
loss_sum=0
......
当权重增多时,并不可取
2、升级算法:梯度下降算法引入
1)公式:
gradient=

通过
不断搜索w, 直到找到全局最小值(loss最小)所对应的w,但在此过程中有可能1)将局部最优解误成全局最优解。
2)当导数为0时,w不更新,陷入鞍点,无法迭代。(马鞍,每个轴有一个切面,一个切面w对应loss取最小值,但别的切面可能取最大值)
2)练习:
已知x、y求w和loss 此题称作cost,其中cost=(y_pred-y)**2
x=[1.0,2.0,3.0]
y=[2.0,4.0,6.0]
w=1.0
def forword(x):
return x*w
def cost(x,y):
cost=0
for i,j in zip(x,y):
y_perd=forword(x)
cost+=(y_perd-y)**2
return cost/len(x)
# 取cost平均值
def gradient(x,y,w):
grad=0
for i,j in zip(x,y):
grad+=2*i*(i*w-j)
return grad/len(x)
# grad也要取平均值
print('predict before training',4,forword(4))
for epoch in range(100):
cost_val=cost(x,y)
grad_val=gradient(x,y,w)
w-=0.01*grad_val
# 更新梯度
print('epoch:',epoch,'w=',w,'loss=',cost_val)
print('predict after training', 4, forword(4))
loss曲线是一直下降的,如果不是那么训练失败(先下降在上升也是失败的)
训练失败的原因:学习率太大
3、随机梯度下降(深度学习常用这个)
1、区别:
cost=(y_pred-y)**2=(x*w-y)**2 其中**2表示平方


2、练习(与上题相同)
已知x、y求w和loss 此题称作cost,其中cost=(y_pred-y)**2
x=[1.0,2.0,3.0]
y=[2.0,4.0,6.0]
w=1.0
# print('type(x)=',type(x))
# # type(w)
def forword(x):
return x*w
def loss(x,y):
y_pred=forword(x)
return (y_pred-y)**2
def gradient(x,y,w):
return 2*x*(x*w-y)
print('predict before training',4,forword(4))
for epoch in range(100):
for xx,yy in zip(x,y):
l=loss(x,y)
grad=gradient(x,y)
w=w-0.01*grad
print('epoch:',epoch,'w=',w,'loss=',l)
print('predict after training', 4, forword(4))
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)