酷极了!5分钟用Python理解人工智能优化算法

作者: python小白社区 2019-11-27 09:47:49

 概述

梯度下降是神经网络中流行的优化算法之一。一般来说,我们想要找到最小化误差函数的权重和偏差。梯度下降算法迭代地更新参数,以使整体网络的误差最小化。

酷极了!5分钟用Python理解人工智能优化算法

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

该算法在损失函数的梯度上迭代地更新权重参数,直至达到最小值。换句话说,我们沿着损失函数的斜坡方向下坡,直至到达山谷。基本思想大致如图3.8所示。如果偏导数为负,则权重增加(图的左侧部分),如果偏导数为正,则权重减小(图中右半部分) 42 。学习速率参数决定了达到最小值所需步数的大小。

酷极了!5分钟用Python理解人工智能优化算法

图3.8 随机梯度最小化的基本思想

酷极了!5分钟用Python理解人工智能优化算法

误差曲面

寻找全局最佳方案的同时避免局部极小值是一件很有挑战的事情。这是因为误差曲面有很多的峰和谷,如图3.9所示。误差曲面在一些方向上可能是高度弯曲的,但在其他方向是平坦的。这使得优化过程非常复杂。为了避免网络陷入局部极小值的境地,通常要指定一个冲量(momentum)参数。

酷极了!5分钟用Python理解人工智能优化算法

图3.9 典型优化问题的复杂误差曲面

我很早就发现,使用梯度下降的反向传播通常收敛得非常缓慢,或者根本不收敛。在编写第一个神经网络时,我使用了反向传播算法,该网络包含一个很小的数据集。网络用了3天多的时间才收敛到一个解决方案。幸亏我采取一些措施加快了处理过程。

说明 虽然反向传播相关的学习速率相对较慢,但作为前馈算法,其在预测或者分类阶段是相当快速的。

酷极了!5分钟用Python理解人工智能优化算法

随机梯度下降

传统的梯度下降算法使用整个数据集来计算每次迭代的梯度。对于大型数据集,这会导致冗余计算,因为在每个参数更新之前,非常相似的样本的梯度会被重新计算。随机梯度下降(SGD)是真实梯度的近似值。在每次迭代中,它随机选择一个样本来更新参数,并在该样本的相关梯度上移动。因此,它遵循一条曲折的通往极小值的梯度路径。在某种程度上,由于其缺乏冗余,它往往能比传统梯度下降更快地收敛到解决方案。

说明 随机梯度下降的一个非常好的理论特性是,如果损失函数是凸的 43 ,那么保证能找到全局最小值。

代码实践

理论已经足够多了,接下来敲一敲实在的代码吧。

一维问题

假设我们需要求解的目标函数是:

()=2+1f(x)=x2+1

酷极了!5分钟用Python理解人工智能优化算法

显然一眼就知道它的最小值是 =0x=0 处,但是这里我们需要用梯度下降法的 Python 代码来实现。

  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3. ""
  4. 一维问题的梯度下降法示例 
  5. ""
  6.  
  7.  
  8. def func_1d(x): 
  9.  ""
  10.  目标函数 
  11.  :param x: 自变量,标量 
  12.  :return: 因变量,标量 
  13.  ""
  14.  return x ** 2 + 1 
  15.  
  16.  
  17. def grad_1d(x): 
  18.  ""
  19.  目标函数的梯度 
  20.  :param x: 自变量,标量 
  21.  :return: 因变量,标量 
  22.  ""
  23.  return x * 2 
  24.  
  25.  
  26. def gradient_descent_1d(grad, cur_x=0.1, learning_rate=0.01, precision=0.0001, max_iters=10000): 
  27.  ""
  28.  一维问题的梯度下降法 
  29.  :param grad: 目标函数的梯度 
  30.  :param cur_x: 当前 x 值,通过参数可以提供初始值 
  31.  :param learning_rate: 学习率,也相当于设置的步长 
  32.  :param precision: 设置收敛精度 
  33.  :param max_iters: 最大迭代次数 
  34.  :return: 局部最小值 x* 
  35.  ""
  36.  for i in range(max_iters): 
  37.  grad_cur = grad(cur_x) 
  38.  if abs(grad_cur) < precision
  39.  break # 当梯度趋近为 0 时,视为收敛 
  40.  cur_x = cur_x - grad_cur * learning_rate 
  41.  print("第", i, "次迭代:x 值为 ", cur_x) 
  42.  
  43.  print("局部最小值 x =", cur_x) 
  44.  return cur_x 
  45.  
  46.  
  47. if __name__ == '__main__'
  48.  gradient_descent_1d(grad_1d, cur_x=10, learning_rate=0.2, precision=0.000001, max_iters=10000) 

就是这么酷吧!用Python理解剃度下降!

算法 人工智能 Python
上一篇:【NCTS峰会回顾】融360艾辉:AI模型测试探秘 下一篇:人工智能和机器学习将会如何改变SaaS行业
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

AI如何改变人类社会的各种业务模式?

在过去的20年中,一些愤世嫉俗的人一直担心,人工智能(AI)的发展会破坏企业结构,导致大量失业和财富不平等加剧。下一个十年将是AI的十年。我们期望看到什么变化?答案是基本流程的转变和减少。

CDA数据分析师 ·  7h前
新冠疫情动态:十大创新,助力对抗COVID-19

从感染快速检测到3D打印解决方案,全球各地的科技企业正携手奋进,希望找到足以战胜新冠病毒大流行的突破性方法。目前有哪些创新成果值得关注?本文将带大家一探究竟。

佚名 ·  9h前
全球首个翻译引擎进化归来 “细节狂魔”搞定方言

最近,一款在线机器翻译软件在日本大火。这款翻译软件名叫DeepL,大火的原因正是因为它工作太负责了,翻译得太过准确,在日本引起了热议。

刘俊寰 ·  12h前
应用程序管理中的AI/ML用例

基于人工智能的操作 (AIOps) 是人工智能和传统 AM/IM 操作的融合。与所有其他领域一样,AI 将对运营管理产生重大影响。

佚名 ·  13h前
船新论文评审Python程序,淘汰人工审核,自动给arXiv打分

英国牛津大学提出了最新的评审标准算法——State-Of-the-Art Review,SOAR,同时开源了它的Python程序代码。

晓查 ·  13h前
学不动了?麻省理工 CS 和 EE 网课开放了

疫情之下,麻省理工学院校长在 3 月上旬曾发通知,其中提到把本剩余课程全部转移到网上。

佚名 ·  16h前
科学家研发出“读心术”,直接将脑电波翻译成文本,错误率低至3%

美国加州大学旧金山分校的科学家,已经训练出一种算法,可以直接将受试者的脑电波实时翻译成句子,错误率仅为 3% 。

张路 ·  17h前
5G风头正盛 人工智能要被“冷落”了?

2018年,5G的热度开始迅速提升。当年开始,我国展开了5G基站建设,并在全国十多个城市开始进行5G测试和试运营。到了2019年,随着各国纷纷宣布开启5G商用,5G的热度再次攀升,成为了通信、科技领域当之无愧的“热点王”。相比之下,人工智能似乎都要稍逊一筹。

佚名 ·  1天前
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载