大家好,今天我们学习【机器学习速成】之 神经网络简介。
话题引出: 我们 马上学三点 ,
大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。
我们先看下面的数据集, 这是一个简单的非线性问题。
非线性问题
通过之前特征组合那一节教程, 我们了解了对非线性问题进行建模的一种可行方法, 我们可以通过特征交叉乘积轻松解决这个问题。
但如果遇到稍微复杂点的问题, 我们该怎么办呢? 比如像这样的问题。
更难的非线性分类问题
从某种程度上讲, 我们得到的可能是一种互相交错的螺旋组合。
很显然,我们的数据集可能会越来越复杂。 最终我们还是希望通过某种方式, 让模型自行学习非线性规律, 而不用我们手动为它们指定参数。
这一愿景可以通过深度神经网络来实现, 深度神经网络可以非常出色地处理复杂数据, 例如图片数据、音频数据以及视频数据等等。
我们将在这一部分详细了解神经网络, 我们希望模型能够自行学习非线性规律, 而不用我们手动为它们指定参数。 那么我们该怎么做呢?
我们可能需要给模型添加一些额外结构,
现在来看看我们的线性模型。 该模型中有一些输入, 每个输入都具有一个权重, 这些权重以线性方式结合到一起产生输出。
线性模型
非线性
如果我们想获得非线性规律, 则可能需要向该模型再添加一个层。 这样,我们可以通过良好的线性组合, 将这些输入添加到第二层。 第二层再以线性方式相结合, 但我们尚未实现任何非线性规律。 因为线性函数的线性组合依然是线性。 这还不够。 很明显, 我们还需要再添加一层,对吧?
我们在模型中再添加一层后, 该模型依旧是线性模型。 因为即便我们添加任意多的分层, 所有线性函数的组合依然是线性函数。
那么,我们就要从其他方面着手。
要对非线性问题进行建模, 我们需要添加非线性函数。 这种非线性函数可位于任何小的隐藏式节点的输出中。
激活函数
如图所示的模型中, 在隐藏层 1 中的各个节点的值传递到 下一层进行加权求和之前, 我们采用一个非线性函数对其进行了转换。 这种非线性函数称为激活函数, 其中一种常用的非线性激活函数叫做 修正线性单元激活函数(简称为 ReLU)。
修正线性单元激活函数
ReLU会接受线性函数, 并在零值处将其截断。 如果返回值在零值以上, 则为线性函数。 如果函数返回值小于零,则输出为零。 这是一种最简单的非线性函数, 我们可以使用该函数来创建非线性模型。
实际上,所有数学函数均可作为激活函数。 TensorFlow 为各种激活函数提供开箱即用型支持。 但建议从 ReLU 着手。
然后,我们可以将这些层级堆叠起来, 并创建任意复杂程度的神经网络。
神经网络的复杂性变化莫测
现在,当我们训练这些神经网络时, 很显然,我们面临的是非凸优化问题, 因此可能需要初始化。 我们训练这些神经网络时使用的方法叫做反向传播, 它是梯度下降法的变形。 而通过反向传播,我们能够以合理高效的方式, 对非凸优化问题执行梯度下降。
人们通常所说的“神经网络”的所有标准组件:
注意,神经网络不一定始终比特征组合好, 但它确实可以提供适用于很多情形的灵活替代方案。
这里讲了三点,关键词有哪几个?
提问!神经网络一定比特征组合好吗?
欢迎回复评论
留言与评论(共有 0 条评论) |