0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习基础知识(5)

CHANBAEK 来源:小小研究生 作者:小小研究生 2023-05-16 18:24 次阅读

上一节中说到,需要求使损失函数最小的权重和偏置,高中数学中,求函数的极值就是使函数导数为0的点。

1、导数

导数是某个瞬间的变化量,瞬间的定义是时间趋近于0

使用代码来实现:

def numerical_diff(f,x):
  h=10e-50
  return(f(x+h)-f(x))/h

此时,h取一个极小的数来表示趋近于0,但是如果太小的话在计算机中贵产生舍入误差,用float32的浮点数来表示依然是0.0。另外,上述定义是函数f在x与x+h之间的差分,是近似的导数定义,而真正的导数是曲线在某一点上的切线,这个误差产生是由于h不可能无限趋近于0。因此,可以计算f在x+h和x-h之间的差分进一步减小误差。

真正数值微分的代码:

def numerical_diff(f,x):
  h=1e-4
  return (f(x+h)-f(x-h))/(2*h)

真正用函数的导数计算出的结果是解析解,而数值微分近似的结果严格意义上并不一致,但是由于误差可以忽略不计,因此可以认为它们是相等的。

2、偏导数

当函数y有多变量时,多变量函数的导数就是偏导数。求偏导数时,多变量中的一个变量是目标变量,其他变量需要为定值。

求偏导的代码:

def function_2(x):
  return x[0]**2+x[1]**2

3、梯度

偏导数汇总而成的向量成为梯度。

向量是有大小和方向的,在梯度图中,箭头的指向就是梯度的方向,箭头的长度就是梯度的大小。 梯度总是指向函数值减小最多的方向。

知道梯度的定义,就可以用梯度来使损失函数减小。复杂函数中,梯度指示的方向基本上都不是函数值最小处,但沿着梯度方向可以最大限度减小函数的值。在梯度法中,函数的值从当前位置沿着梯度方向前进,然后在新的地方重新求梯度,再沿着新梯度的方向前进,不断重复,逐渐减小函数值。寻找最小值的梯度法是梯度下降法,寻找最大值的梯度法是梯度上升法,一般神经网络中梯度法主要是指梯度下降法。

4、梯度法求某个函数值优化结果

η是学习率,表示更新量,决定在一次学习中,应该学习多少以及在多大程度上更新参数。上式会反复执行,逐渐减小函数值。学习率需要事先确定,过大或过小都不行,一般会一边改变学习率一边确定学习是否正确进行。

梯度下降法代码:

def gradient_descent(f,init_x,lr=0.01,step_num=100);
  x=init_x
  for i in range(step_num):
    grad=numerical_gradient(f,x)
    x-=lr*grad
    return x

参数f是要最优化的函数,init_x是初始值,lr是学习率,step_num是重复次数。 numerical_gradient()会求函数梯度,并更新x。

当使用梯度法求f(x0,x1)=x0^2+x1^2的最小值时,设置初始值为(-3,-4),学习率为1,上面次数定义的时候是100,实际使用的时候设置是20,最终结果为[-0.03458765 0.04611686]。 使用解析法求最小值是[0,0],因此结果在一定程度上可以认为是一致的。

对梯度法每次迭代进行绘图显示,函数的取值在向原点(最小值处)逐步靠近。

学习率的设置非常重要,当我们将其设置为10时,结果为[-2.58983747e+13 ,-1.29524862e+12]发散成一个很大的值。 当设置成1e-10时,结果为[-2.99999999 , 3.99999998]几乎没有什么变化。 学习率这种超参数和权重偏置不同,只能人工设定,需要尝试多个值。

5、梯度法求神经网络的损失函数优化结果

class simpleNet:
    def __init__(self):
        self.W = np.random.randn(2,3)
    def predict(self, x):
        return np.dot(x, self.W)
    def loss(self, x, t):
        z = self.predict(x)
        y = softmax(z)
        loss = cross_entropy_error(y, t)
        return loss
x = np.array([0.6, 0.9])
t = np.array([0, 0, 1])
net = simpleNet()
f = lambda w: net.loss(x, t)
dW = numerical_gradient(f, net.W)
print(dW)

init (self)创建一个随机的2*3的矩阵,predict(self,x)让x与W矩阵相乘,loss(self,x,t)定义了损失函数。 给定了x,t之后调用了实例化的类,再将net.loss传递给f后,在numerical_gradient()函数中进行调用求梯度。

至此,求出了神经网络的梯度,接下来只需要根据梯度法更新权重参数。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4785

    浏览量

    101276
  • 计算机
    +关注

    关注

    19

    文章

    7553

    浏览量

    88798
  • 函数
    +关注

    关注

    3

    文章

    4350

    浏览量

    63051
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14374
  • 深度学习
    +关注

    关注

    73

    文章

    5521

    浏览量

    121660
收藏 人收藏

    评论

    相关推荐

    C语言基础知识(5)--循环语句

    C语言基础知识(5)--循环语句
    的头像 发表于 06-15 10:18 2540次阅读
    C语言<b class='flag-5'>基础知识</b>(<b class='flag-5'>5</b>)--循环语句

    5G新空口标准基础知识

    通俗易懂的5G新扣扣标准基础知识,是非常实用的初级学习资料。
    发表于 04-02 20:41

    5G新空口标准基础知识

    5G新空口标准基础知识,很好的初步学习资料。
    发表于 04-05 16:06

    怎么学习嵌入式系统基础知识

    如何学习嵌入式系统基础知识
    发表于 02-19 06:28

    STM32学习基础知识

    STM32学习基础知识对于具体开发过程中IO口的使用查阅硬件资料里的数据手册即可!(标注FT的都可以5V)小结和51单片机相比,操作寄存器这种方法的劣势是你需要去掌握每个寄存器的用法,你才能正确
    发表于 08-16 07:42

    通信基础知识教程

    通信基础知识 1、电信基础知识2、通信电源技术3、配线设备结构、原理与防护4、防雷基础知识5、EMC基础知识6、防腐蚀原理与技术7、产品安
    发表于 03-04 16:48 33次下载

    FPGA开发经验与技巧_基础知识学习篇(1)

    FLC1301T00 基础知识学习篇希望会对朋友们的学习有帮助!
    发表于 12-16 15:27 3次下载

    ADC【DSP基础知识

    ADC【DSP基础知识】,好好学习,从零开始学习DSP
    发表于 01-06 16:44 10次下载

    使用Eclipse基础知识

    使用Eclipse 基础知识 使用Eclipse 基础知识 适合初学者学习使用
    发表于 02-26 10:30 0次下载

    Verilog_HDL基础知识非常好的学习教程 (1)

    Verilog_HDL基础知识非常好的学习教程 (1)
    发表于 01-04 12:33 0次下载

    PLC基础知识学习,不看后悔

    PLC基础知识学习,不看后悔
    发表于 09-09 08:43 103次下载
    PLC<b class='flag-5'>基础知识</b><b class='flag-5'>学习</b>,不看后悔

    机器学习基础知识详细说明

    本文档的主要内容详细介绍的是机器学习基础知识详细说明。
    发表于 03-24 08:00 0次下载
    机器<b class='flag-5'>学习</b>的<b class='flag-5'>基础知识</b>详细说明

    51单片机学习 基础知识总结

    51单片机学习 基础知识总结
    发表于 11-11 19:21 39次下载
    51单片机<b class='flag-5'>学习</b>    <b class='flag-5'>基础知识</b>总结

    单片机基础知识学习笔记

    单片机基础知识学习笔记有关总线1.IIC总线2.SPI总线
    发表于 11-14 16:51 26次下载
    单片机<b class='flag-5'>基础知识</b><b class='flag-5'>学习</b>笔记

    深度学习基础知识分享

    深度学习也为其他科学做出了贡献。用于对象识别的现代卷积网络为神经科学家们提供了可以研究的视觉处理模型(DiCarlo,2013)。深度学习也为处理海量数据以及在科学领域作出有效的预测提
    发表于 09-05 10:30 1次下载