很多神经网络领域的重要研究都出现在 1980 年代和 1990 年代 但当时计算机速度非常慢 数据集也很小,研究并未在现实生活中得到很多应用,因此 21 世纪的前十年 神经网络,几乎从机器学习领域完全销声匿迹了,关于神经网络的研究变得非常边缘化。
只有在近几年 首先是 2009 年左右的语音识别。然后是 2012 年左右的计算机视觉。神经经网络才华丽转身 荣耀回归。
究竟什么变了。
现在我们拥有海量数据 以及廉价、快速的 GPU,如今 神经网络已经无处不在,如果你从事任何与数据、分析或预测相关的工作,这些知识是你绝对需要熟悉掌握的
在机器学习中不仅仅只有分类问题,但是分类或者预测 是机器学习的基石,一旦你知道如何将事物分类,学习检测或排序这些事物将变得非常简单
举一个检测任务的例子,假设你在你的车上有一个摄像头拍摄前面的街道,你想检测你前面的行人在哪,保证你不撞到他们,你怎么能通过一个分类器实现呢?
一种把这个检测问题转化为分类问题的方法是,一个分类器将图片中的小块分成两类,行人或者非行人,你就可以对图片多次执行这个分类器,每当它的输出为行人时 就告诉你你所需要的行人位置
这是另一个例子,网页搜索排序,假设你有一个搜索请求,你想找到在网站上所有跟请求相关的网页,你怎么使用一个分类器实现?
下面是一种实现方法,使分类器接收成对的搜索请求和网站,输出则是两类中的其中一个 相关或者不相关,当然 如果你在整个网络中运行分类器,将会有无数的网页需要查看,但是搜索引擎将会走捷径,仅尝试分类那些比较有可能的候选网站
下面训练一个逻辑分类器
逻辑分类器就是所谓的线性分类器,它将比如图像的像素作为输入 对其应用线性函数 来生成预测,线性函数就是一个巨大的矩阵乘法器,它将所有输入作为一个大的向量 用 x 表示 然后将它们,与一个矩阵相乘 来生成预测 每个输出类一个。矩阵的权重和偏差是用到机器学习的地方
接下来我们将训练模型,这意味着我们将尝试找出一些值找到能很好预测结果的权重和偏差值, 那么 我们如何使用这些得分来执行分类呢?那么 来概括一下我们的任务。作为输入的每幅图像 有且仅有一个标签,我们要将这些得分转换成概率,让正确类的概率尽可能接近 1而其他各类的概率接近于 0
将得分转换成概率的方法 就是运用一个 Softmax函数,我在这里用 S 表示它长这个样子,但除了公式之外 有重要的一点就是,它可以将任何类型的得分 适当转换成一组相对合适的概率,这些概率的总和为 1 当原始得分较大时 概率值就较大,得分较小时则小概率 在逻辑回归中,通常被称为对数。
下面的 demo 稍微测试一下 Softmax 函数,一个分类器对三类将输出三个结果 那么 Softmax 函数将产生什么样的概率?
定义一个 softmax(x) 函数 给定这一系列的结果,来计算 softmax 的概率值,让我们画一下当修改结果时概率如何变化,例如 修改第一类,可以是一个 numpy 数组 每一个结果一行 这里为三行,且会存在任意列 每个样本一列,你的函数应该可以处理这样的输入,并返回一个具有同样形状的 numpy 数组。
"""Softmax."""
import numpy as np
# Plot softmax curves
import matplotlib.pyplot as plt
scores = [3.0, 1.0, 0.2]
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
return np.exp(x)/np.sum(np.exp(x),axis = 0)
print(softmax(scores))
x = np.arange(-2.0, 6.0, 0.1)
scores = np.vstack([x, np.ones_like(x), 0.2 * np.ones_like(x)])
plt.plot(x, softmax(scores).T, linewidth=2)
plt.show()
运行结果
注意到所有概率的和相加等于 1,设置基线 蓝色线为X,黄色线为1.0,绿色线为0.2
那么正如你看到的那样 第一类的概率随着 x 增大 概率从 0 开始 最终接近于 1,同时 其他类的概率刚开始相当高,但他们渐渐的降低接近于 0