Brief Introduction of Deep Learning - 深度学习简介
1. 前言
- deep learning 在近些年非常热门,从2012年开始,深度学习的应用数目几乎是呈指数增长的。
- 深度学习的发展史如下图:
2. 深度学习的步骤
2.1 第一步: 定义一个神经网络
神经网络由神经元组成,每个神经元如上图所示,每个神经元都有一个 bias 和一个 function ,每条输入的边都有一个 weight。
假设这个神经元的输入是 ,则最后的输出是
神经网络有许多神经元组合而成,神经元之间的连接一般为全连接(fully connect),第一层是输入层(input layer),最后一层是输出层(output layer),中间的叫做隐层(hidden layers),前一层的输出作为后一层的输入。
深度学习中的所谓深度就是指神经网络有很多 hidden layers。
神经网络的计算可以转换成矩阵计算,这么做的好处就是可以用 GPU 进行加速,可以大幅度提高计算效率。
例子: 手写数字辨识
输入: 一张 16*16 的图片,即 256 维的向量
输出: 一个 10 维的向量
- 如何决定神经网络的结构? 一般只能通过经验加尝试,还有你的直觉。真是玄学~
还有一些方法能让机器自己去学习出神经网络的结构,但是还不成熟。也有一些其他的除全连接之外的结构,比如 卷积神经网络(Convolutional Neural Network)。
2.2 定义一个函数的好坏(Loss Function)
可以有很多种方法,其中有一种方法是计算 Cross Entropy,公式如下:
Total Loss:
2.3 找出最好的函数
- 没有其他的,就是用 梯度下降法(Gradient Descent),但是因为深度学习的函数太复杂,要直接计算微分的话,计算量实在太大了,所以一般会用一个叫做 反向传播(Backpropagation) 的算法来做,这个算法会在之后详细介绍。
3 一些废话
- 再说一句,虽然我们是用 Backpropagation 来帮我们算微分,但是其实就连这个我们都不会自己去算,基本都是用一些工具来帮我们,比如 TensorFlow。到此结束了吗?没有的,人这么懒的生物,觉得 TensorFlow 也太复杂了,所以又写了一堆 API 去直接调用 TensorFlow ,这就是之后会讲到的 Keras,果然懒才能推动人类不断进步。
- 由于上述原因,大部分搞机器学习就是调调包,跟叠积木一样,不知道这是好还是不好。我也只是个初学者,希望能在这条路上走得远一些。