机器学习基础:第1部分-什么是机器学习?

亚历克斯 亚历克斯2020年5月15日遵循
机器学习基础:第1部分-什么是机器学习?

欢迎来到机器学习基础系列。在这门课程中,您将学习使用TensorFlow构建机器学习模型的基础知识。你需要知道的唯一一件事就是一点Python。如果你之前学过ML,被微积分和其他数学吓到了,那么这门课就是为你准备的。在这节课中,我们将首先讨论什么是机器学习,以及它是如何工作的。

首先,让我们思考一下编程以及从一个非常高的层次上看它是什么样的。也许你必须创建一些财务软件,在其中编写代码来获取数据并对其进行一些新的处理。有一种流行的分析方法叫做市盈率,也就是市盈率。它的代码看起来有点像这样。机器学习基础:第1部分-什么是机器学习?但是请大家想想我在这里标注的三件事。有数据,你可以根据数据编写规则。这就是我们程序员带来价值的地方,因为这些规则会提供答案。机器学习基础:第1部分-什么是机器学习?另一种编程规则的方式是像游戏一样,游戏会对游戏世界中发生的事情做出反应。

所以也许像“突围”,当球击中砖块时,球应该反弹回来,砖块应该消失。机器学习基础:第1部分-什么是机器学习?同样,你有数据,球的位置,砖块的位置,等等。你有规则,也就是你写的代码行。你有答案——游戏情境如何更新以回应这些行动。

我喜欢用这些术语来总结传统编程。你有输入的规则和数据,也有输出的答案。这基本上就是我们赖以生存的东西。机器学习基础:第1部分-什么是机器学习?

传统编程图

正在进行的机器学习从程序员的角度来看,革命只是这个图的重新定位。

机器学习基础:第1部分-什么是机器学习?

机器学习图

所以,作为程序员的我们,不要试图找出能给我们答案的规则,如果我们能在输入数据的同时输入大量的答案,然后让机器找出这些规则呢?

这就是机器学习的真正意义所在。获取大量的数据,知道这些数据的答案是什么——这是一个被称为标签的过程——然后建立将一个与另一个匹配的规则。

现在看起来可能有点模糊,所以让我们来看一个场景。想想智能手表这样的活动识别设备。如果你正在创造一个这样的东西,你在上面安装了传感器来提供数据,比如这个人移动的速度,你会写什么规则来给出答案?答案当然是这个人的行为。

例如,你可能会说,如果速度小于某一数值,答案就是这个人在走路。你可以扩展一下,如果它大于这个量,那么这个人就在跑步。现在您已经检测到两种活动——走和跑。这有点幼稚,但希望它只是用于说明。机器学习基础:第1部分-什么是机器学习?

但如果你想更进一步呢?例如,另一种健身活动是骑自行车。你可以扩展你的算法来理解这样的骑行。如果值小于4,它们就在行走。否则,如果小于12,它们就在跑。否则他们就骑自行车。这仍然是可行的,但是如果你想检测高尔夫球,会发生什么呢?哦,是的。

不仅仅是高尔夫——尽管这个算法很幼稚,但很容易看出这是一个很难用规则实现的场景。你的速度会随着你的上升或下降而变化,你的行走速度可能就是我的跑步速度,等等。有时人们不能简单地找出规则来决定像这样复杂的行为。

因此,如果我们回到机器学习的图表,并将机器学习视为数据输入的答案,并从中推断出规则,那么我们就可以改变我们的活动识别场景。

那么,如果你让很多很多人都戴着你的传感器,然后说他们在走路,你就能捕捉到数据,那会怎么样呢?机器学习基础:第1部分-什么是机器学习?跑步、骑自行车,甚至打高尔夫也一样。如果你查看这些数据并有办法找出如何将模式与标签匹配呢?你会有一个场景,说这是走路的样子,这是跑步的样子,等等。这就是机器学习的核心——拥有大量的数据,为这些数据贴上标签,然后编程让计算机找出数据中哪些不同的部分适合这些标签。

这只是一个假设的场景,但同样的概念可以应用于计算机视觉和自然语言处理等领域。在这门课中你会学到这些技巧。

让我们从一个非常简单的场景开始,我认为这就是机器学习的世界。看看这些数字。机器学习基础:第1部分-什么是机器学习?他们之间有某种联系。x和y之间有一个关系对于每对x和y都成立。当x = - 1时,y = - 3。当x = 1 y = 1,等等。你能看出规律吗?

这里的关系是每个y等于2乘以对应的x - 1。是的,我知道我们说过我们不会做很多数学运算,但我希望你能接受这个例外。

如果你知道答案,那么你是怎么得到的呢?对我来说,我看到当x增加1时y增加2,所以我猜y等于2x加上或减去什么。然后我猜测它可能是-1,因为当x = 0时,答案是-1。我回顾了所有其他的数字,我发现这种关系成立。这几乎也是神经网络的工作方式。

让我们在代码中探索一下。这是一个TensorFlow应用程序的例子它会为我们找出这种关系。

model = keras.Sequential([keras.layers。密度(单位= 1,input_shape = [1]))model.compile(优化器= sgd,损失=“mean_squared_error”)x = np.array ([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0), dtype =浮动)y = np.array ((-2.0, 1.0, 4.0, 7.0, 10.0, 13.0), dtype =浮动)模型。Fit (xs, ys, epoch =500) print(model.predict([10.0]))

我知道这里有很多新概念,所以我要一个一个地把它们拆开。

model = keras.Sequential([keras.layers。密度(单位= 1,input_shape = [1]))

这可能是最神秘的一组,所以让我们直观地解释一下。你知道你经常看到的神经网络的图片看起来有点像这样吗?机器学习基础:第1部分-什么是机器学习?红框里的每一列都是层,蓝色的每一团都是神经元。每个神经元都与其他神经元相连,这被称为密集层,因为它们之间有密集的连通性。你可以用代码定义这些类型的神经网络。让我们回顾一下我们的代码,看看我们定义了什么。

这一行的第一部分说它是akeras。顺序Keras是一个框架TensorFlow使训练的定义和使用ML模型变得容易。我会在这门课上广泛使用它。sequential这个名字基本上告诉我们,我们要定义一个层的序列。在前面的图表中,我们有三个层。你认为我们在代码中定义的网络中有多少层?只有一行,因为我们在序列中只有一行代码。你注意到它是什么类型的层了吗?它是一种密集的,是最简单的层类型,里面有基本的神经元。稍后您将了解更多复杂的神经元类型,但密集的神经元类型是相当基本的。

我们的密度是什么样子的?在密度参数中是可见的。我们说我们只有一个单元,或者说这一层只有一个神经元。我们只有一层。参数input_shape告诉我们要训练我们的层的数据的形状,它只是一个值。我们的神经网络是这样的。机器学习基础:第1部分-什么是机器学习?这是你能得到的最简单的神经网络——一层,一个神经元。神经元能做的就是学会将数据与标签匹配。让我们看看这个是如何返回到我们的代码的。

model.compile(优化器= sgd,损失=“mean_squared_error”)

网络学习的核心在于这两个参数——优化器函数和损失函数。这就是机器学习中所有数学的来源。让我来解释一下它们是做什么的。

这个想法是,神经网络不知道数据和标签之间的关系,所以它必须做出猜测。然后它查看数据并评估猜测结果。损失函数是一种衡量猜测好坏的方法。优化器使用此结果进行另一个猜测。然后再次使用损失函数测量该猜测,其逻辑是优化器可以改进猜测。该数据被传递回优化器以获得另一个猜测,等等。这是训练神经网络的过程。在我们的代码中,我们将执行这个循环—进行猜测,用损失函数测量其有效性,优化以获得另一个猜测,并重复500次。有一些复杂的数学来测量损失和优化新的猜测,但我们现在不打算详述这个。

这里称为损失函数mean_squared_error,优化器为sgd,代表随机梯度下降。我们将使用它们编译模型。

接下来,我们将定义数据。

x = np.array ([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0), dtype =浮动)y = np.array ((-2.0, 1.0, 4.0, 7.0, 10.0, 13.0), dtype =浮动)

NP代表NumPy——一个Python库,使处理数据变得更容易,当你使用机器学习时,你会经常看到它。我们称数据为x,标签为y。

接下来是我们学习的地方。

模型。Fit (xs, ys, epoch =500)

我们告诉模型使x和y相匹配,然后做我们之前说过的循环500次,或者说500个周期。最后,神经元在一开始所做的粗略猜测有望被细化成一个好的模型,找出x和y之间的关系。

一旦模型完成训练,您就可以使用它来预测值。

print (model.predict ([10.0]))

根据我们对x和y的了解,它们之间的关系是y = 2x - 1,你认为预测10.0的答案会是什么?

你可能认为答案是19,而且你的答案非常接近正确。但由于一些原因,它不会精确到19——最显著的事实是,这个模型只在6点数据上训练,而对于这6点数据,关系是线性的。也就是y = 2x - 1。但不能保证其他点的情况也一样。数据可能会向其他方向倾斜,而神经元不知道情况是否如此,因为它只在有限的数据上进行了训练。

也就是说,它是一条直线的概率非常高,所以神经元在学习中会考虑这个因素,当被要求预测时,它会给你一个非常接近19的数字,因为当x = 10时y的值是19的概率非常高。

这是要记住的重要一课。神经网络处理概率问题。它们会给你一个答案是正确的可能性,你经常需要处理这种可能性。

如果我们回到传统的编程,你可以写一个这样的函数,它是可行的。

getResult (x) {
Return (2*x) - 1;

y = getResult(x);

但它只会永远返回2*x - 1,因为这样做是硬编码的。你可以这样推广这个函数

getResult(x, p1, p2) {
返回(p1*x) - p2;

y = getResult(x, 2, -1);

你在哪里传递参数2和-1,现在函数将返回2x - 1,如果您想使用其他值,也可以这样做。

神经元是这样工作的,它有参数而不是硬编码的值,但它随着时间的推移从数据中学习这些参数。因此,它是一个学习如何行为的一般函数。这就是“机器学习”这个术语的由来。我们的神经元正在学习能给出预期结果的参数,以期这些结果在未来与其他数据一起工作。

下一个:第2部分-计算机视觉的第一步

如果您在文本中发现了错误,请通过选择错误并按Ctrl-Enter向作者发送消息。

评论(0)

    暂无评论

你必须登录才能发表评论。

登录/报名

页在1.2768008708954中生成
Baidu
map