Joseph Chu's Blog

积极勤奋,主动勇敢


  • Home

  • Archives

  • Tags

  • Categories

  • About

  • Search

Colab导入Python文件

Posted on 2019-03-21 | In Tools

分两步走

  1. 上传文件

    1
    2
      from google.colab import files
    uploaded = files.upload()
  2. 载入文件

    1
    2
    3
    4
      # Py3 
    exec(open('example.py').read())
    # Py2
    execfile('example.py')

【机器学习中的数学】梯度

Posted on 2019-03-06 | In Machine Learning , Maths

先来看梯度的定义

梯度:是一个向量,其方向上的方向导数最大,其大小正好是此最大方向导数。方向导数就是某个方向上的导数。

简单来说,梯度这个向量指向了自变量应该改变的方向,使得因变量增长最快。

从具体定义上来看,梯度实际上就是多变量微分的一般化。

我们可以看到,梯度向量的每个维度值其实就是目标函数对每个变量的微分,然后用逗号分割开,用<>包括起来。

下面我们来看一个单变量函数梯度的例子。

这是 $y = x^2$ 的图像。在这个例子中只有一个自变量 $x$,那么按照我们上面的定义,梯度就是对该自变量 $x$ 求微分,即 $\frac{d(x^2)}{dx} = 2x$ ,换句话说,梯度向量 $G$ 是一个一维向量 $<2x,>$ , 具体的值取决于此时 $x$ 的值。假设我们此时在 $(1, 1)$ 点,那么此时的梯度向量 $G = <2,>$。 $2 > 0$ 代表自变量 $x$ 应向 $x$ 轴正方向移动,使得因变量 $y$ 增长最快。

那么对于多变量函数呢?其实也是一样的。

比如我们定义中的这个多变量函数

这里的梯度 $G = <-5, -2, 12>$该则么理解呢?因为 $-5 < 0, -2 < 0, 12 > 0$, 所以要想使函数值 $J$ 增长最快,$θ_1, θ_2$ 应该向其负方向移动,而 $θ_3$ 应该向正方向移动。但是!$θ_1, θ_2, θ_3$ 移动的幅度必须按照 $ 5: 2: 12$这个比例,以保证三个自变量整体的移动是符合梯度方向的。

梯度下降 (Gradient Descent)

梯度下降是神经网络中常用的一个算法。

神经网络的本质可以概括为,一个输入列向量,左乘若干个变换矩阵,得到结果即是输出向量, 如下图(p.s. 不是很严谨,因为没有考虑激活函数,但是这里不影响)。

而变换矩阵中的每一个元素就是神经网络中每一条连接的权重值。神经网络训练的目标就是要找到每个合适的权重值,使得输入向量经过一系列变换后,可以得到我们希望的输出向量。

为了达到这个目的,我们构建对于这些权重$θ_1, θ_2…$的损失函数 $J(θ)$,并找到使$J(θ)$取最小值时的自变量值。

在神经网络中,梯度下降的公式如下

在这里,对于自变量向量 $θ$,$θ^0$ 是其更新前的值,而 $θ^1$ 通过一次梯度下降更新后的值。
$▽J(θ)$是梯度,表示函数值上升最快的自变量变化方向,前面的负号则表示我们要往梯度的反方向,即函数值下降最快的方向前进。 $α$ 是学习速率(Learning Rate),与梯度向量相乘,用来调节我们一次要走的步长。(也就是说,梯度向量中单个维度具体的值意义不大,因为我们可以通过学习率$α$调节要走的步长,但是梯度向量中每个维度值之间的顺序和比例关系很重要,因为代表了梯度方向)

最后我们来看一个多变量函数的梯度下降的例子(例子取自深入浅出–梯度下降法及其实现 - chi的文章 - 知乎)

我们假设有一个目标函数

$$J(θ) = θ^2_1 + θ^2_2$$

现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下来,我们会从梯度下降算法开始一步步计算到这个最小值!
我们假设初始的起点为:

$$θ^0 = (1, 3)$$

初始的学习率为:

$$ α = 0.1 $$

函数的梯度为:

$$▽J(θ) = <2θ_1, 2θ_2>$$

进行多次迭代:

我们发现,已经基本靠近函数的最小值点

参考

  • 深入浅出–梯度下降法及其实现 - chi的文章 - 知乎
  • 神经网络中数学知识简易梳理 - Aaron Yang的文章 - 知乎
  • 如何直观形象的理解方向导数与梯度以及它们之间的关系? - 马同学的回答 - 知乎

《神经网络与深度学习》笔记-第一章-神经网络基础与梯度下降算法

Posted on 2019-02-27 | In Machine Learning

本系列笔记文章意在对《神经网络与深度学习》一书中学到的知识点进行浓缩和总结,并加入自己的理解。

《神经网络与深度学习》资源
英文版:http://neuralnetworksanddeeplearning.com/
中文版:https://pan.baidu.com/s/1mi8YVri 密码:e7do

Read more »

【机器学习中的数学】微分

Posted on 2019-02-20 | Edited on 2019-03-06 | In Machine Learning , Maths

微分

简单来讲(可能有失严谨),微分即形如 $\frac{dy}{dx}$ 这样的式子。式子中的 $dy$ 和 $dx$ 是变量,表示 $∆y$ 和 $∆x$ 在 $∆x$ 趋近于0的时候的状态。

或者更简单粗暴来说,微分就是导函数。

微分的意义最常用的是以下两种:

  • 函数图像中,某点的切线的斜率
  • 函数的变化率

下面是几个微分的例子

  • 单变量微分:$\frac{d(x^2)}{dx} = 2x$
  • 多变量微分:$\frac{∂(x^2y^2)}{∂x} = 2xy^2$

最后附上可微分的定义

一个函数可微分即该函数的导数存在,并且导数存在于定义域中的每一个值。

Numpy数组索引的一些理解

Posted on 2019-02-07 | Edited on 2019-02-08 | In Python Package Usage

最近在学Pytorch,因切片规则和Numpy相同,特在此记录。

Read more »

自己领悟的一些道理

Posted on 2018-12-31 | In 随笔
  • 不要为改变不了的事情懊恼,伤心,比如已经浪费了的时间,振作起来,及时止损是此时的最优解。
  • 记得好好说话,这是给自己留余地
  • 情绪是多变的。不要以顺应情绪为一天的基调,而要专注在自己应该做的事情上。难受了,就歇会,起来走走,喝口水,深呼吸,调整好了再继续。
  • 人在多任务之间的切换代价是比较大的。尽可能一次只做一件事,专注,做好。
  • 重要的不是你在一个任务上砸了多少时间,而是你的效率有多高,你的目标有多明确,以及你的执行力是否够强。
  • 累了就去休息吧,别在这个时候瞎坚持,休息是为了走的更远,做的更好。

【随笔】别了2018

Posted on 2018-12-30 | Edited on 2019-02-07 | In 随笔

我在想用什么词才能最贴切地形容这一年。

应该是“归回”吧。

Read more »

[Python] switch...case的实现

Posted on 2018-12-30 | In Programming Languages

Python与C++不同,并没有提供switch…case语句。

Read more »

[Python] staticmethod和classmethod的区别

Posted on 2018-12-30 | In Programming Languages

个人理解:

  • staticmethod:
    • 静态方法
    • 可以没有任何参数
    • 无法访问类变量和实例变量
  • classmethod:
    • 类方法
    • 第一个参数必须是类本身,即cls
    • 可以访问类变量
Read more »

Mac中环境变量配置文件的区别

Posted on 2018-12-30 | In Mac

其配置文件的优先级如下所示:

1
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
  • /etc/profile (建议不修改这个文件 ) 全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
  • /etc/bashrc (一般在这个文件中添加系统级环境变量) 全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件。
  • ~/.bash_profile (一般在这个文件中添加用户级环境变量) 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!

参考

  • Mac 中环境变量的配置和理解
123…8

Joseph Chu

一日之功很有限,不过可以积少成多
72 posts
17 categories
50 tags
© 2019 Joseph Chu
Powered by Hexo v3.6.0
|
Theme – NexT.Pisces v7.0.1