初识机器学习

机器学习是什么?

机器学习是人工智能的一个分支。人工智能的研究历史有着一条从以“推理”为重点,到以“知识”为重点,再到以“学习”为重点的自然、清晰的脉络。显然,机器学习是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题

对于初学者而言,看到这个解释可能还是一脸懵逼。

举个例子

x-101234
y-21471013

从数据推断出xy的函数关系 可能 为:

y=3x+1

在一维空间中描点画图的方式能很快得出以上线性方程式,但是如何让计算机习得这个结论呢?这正是机器学习要做的事情。 从教程及资料的丰富程序比较了下,笔者选择tensorflow作为机器学习平台,因为Google家的教程及文档真的是丰富且全面。

import tensorflow as tf
import numpy as np
from tensorflow import keras

# 实验过程中tensorflow的版本
# tf.__version__ == '2.0.0'

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

model.fit(xs, ys, epochs=500)

print(model.predict([10.0]))

以上lib库的导入以及神经网络模型的定义我们暂且不管,先来看xsys的定义,数据类型为浮点型,将数据样本载入模型中,通过model.fit对数据进行训练。 训练的过程可以理解为猜测xy的函数关系,最后一行通过模型训练得到的结果来预测输入x=10.0时,y的值应为多少?

2019-10-10 20:20:39.423092: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-10-10 20:20:39.492445: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fac1cfe7710 executing computations on platform Host. Devices:
2019-10-10 20:20:39.492476: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): Host, Default Version
Train on 6 samples
……
[[30.999296]]

最后的结果为:30.999296, 并不是我们所认为的31,因为本身实验所提供的数据样本太小,只有6个,神经网络在建模的过程中只会认为模型为y=3x+1的概率非常之高,而并非100%,所以这里看到的结果是一个逼进值。

这里有还有两个疑问:

  1. 最终神经网络训练出来的模型究竟是怎么样的?是否可解释或者是能够具像的表示出来;
  2. 同样一份代码,最终运行得到的预测值不完全一样(再次运行结果为:30.994562);

至此,我们对机器学习算是有了一个初步的认知。 ps: 这里并没有详述tensorflownumpykeraslib的运用,笔者这里只是想表达对机器学习一个相对直观的理解,为后续的学习建立一个初步的认知。

参考:

comments powered by Disqus