一、以“机票价格预测服务”为例,在该过程中,我们会用到监督学习方法来训练它。
我们希望,飞机票价格估算器可以利用以下几个输入值来预测飞机票价格(为防止太过复杂,这里不包括返程票):
出发机场
目的地机场
出发日期
航线
1、 神经网络(Neural networks)
和动物一样,我们的估算器AI大脑也有神经元。在下图中,这些神经元由一个一个圆圈表示,并且彼此间之间存在着联系。
神经元被分为三个不同类型的层:
A. 输入层(Input Layer)
B. 隐藏层(Hidden Layer)
C. 输出层(Output Layer)
隐藏层对输入数据执行数学计算过程。决定隐藏层的数量,以及每一层的神经元数量,是神经网络创建时的一个挑战。
深度学习中的“深度”指的是隐藏层不止一个。
输出层返回输出数据。在本例中,输出层返回价格估算值。
那么,它是如何计算价格估算值的呢?
神经元之间的每一个连接都有一定的权重。权重值表明了输入值的重要性。一开始,权重一般都是随机设置的。
在预测飞机票价格时,出发日期是比较重要的一个因素。因此,出发日期神经元连接拥有较高的权重。
每一个神经元都有一个激活功能(Activation Function)。简单的说,激活功能的目的之一是将神经元的输出值“标准化”。一旦输入数据通过神经网络的各个层时,它就会通过输出层返回输出数据。
2、训练神经网络
为什么训练AI是深度学习中最困难的部分呢?原因在于:
A. 你需要一个很大的数据集
B. 你需要强大的计算能力
在机票价格预测中,我们需要搜集机票价格的历史数据。由于机场和出发日期组合存在多种可能性,我们需要大量的机票价格列表。
为了训练AI,我们需要从数据集里提炼输入值,并将该输入值带来的输出值与数据集里的输出值进行比较。此时因为AI还没有被训练,所以它的输出值应该是错误的。
一旦走完所有数据集,我们就可以创建一个函数,通过这个函数,我们可以知道AI的输出值与真实的输出值的差异有多大。这个函数被成为“成本函数”(Cost Function).
理想情况下,我们希望成本函数为0,这通常发生在AI输出值与数据集输出值相同的情况下。
如何缩小成本函数?
我们可以随机去改变神经元之间的权重,直到成本函数降低,但这么做,效率着实不高。
因此,我们可以利用梯度下降法(Gradient Descent)来实现这一目标。
通过梯度下降法,我们可以找到函数的最小值。在这个例子种,我们寻求的是成本函数的最小值。
那么如何实现呢?
我们可以在每次数据集迭代以后,改变小增量中的权重。通过计算成本含函数在某个特定权重中的导数(或梯度),我们能够找到最小值。
为了减小成本函数,你需要多次重复数据集。这也就是为什么你需要大量的计算能力的原因了。
利用梯度下降法升级权重是可以自动完成的,这就是深度学习的魔力所在。
一旦我们训练出机票价格预测器AI,我们就可以利用它来预测未来的机票价格。