机器学习日记(5)

机器学习日记(5)

神经网络:表述(Neural Networks: Representation)

非线性假设(Non-linear Hypotheses)

我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大
下面是一个例子:
机器学习日记(5)_第1张图片
当我们使用1, 2 的多次项式进行预测时,我们可以应用的很好。
之前我们已经看到过,使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于 100 个变量,我们希望用这 100 个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合(12 + 13 + 14+. . . +23 + 24+. . . +99100),我们也会有接近 5000 个组合而成的特征,这对于一般的逻辑回归来说需要计算的特征太多了,若用逻辑回归来处理照片,假使我们采用的都是 50x50 像素的小图片,并且我们将所有的像素视为特征,则会有2500 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约25002/2个(接近 3 百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。

神经网络模型表示(Neural Networks Model Representation)

为了构建神经网络模型,我们需要首先思考大脑中的神经网络是怎样的?每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
机器学习日记(5)_第2张图片
神经元利用微弱的电流进行沟通。这些弱电流也称作动作电位,其实就是一些微弱的电流。所以如果神经元想要传递一个消息,它就会就通过它的轴突,发送一段微弱电流给其他神经元,轴突是一条连接到输入神经,或者连接另一个神经元树突的神经,接下来这个神经元接收这条消息,做一些计算,它有可能会反过来将在轴突上的自己的消息传给其他神经元。这就是所有人类思考的模型:我们的神经元把自己的收到的消息进行计算,并向其他神经元传递消息。这也是我们的感觉和肌肉运转的原理。如果你想活动一块肌肉,就会触发一个神经元给你的肌肉发送脉冲,并引起你的肌肉收缩。如果一些感官:比如说眼睛想要给大脑传递一个消息,那么它就像这样发送电脉冲给大脑的。
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。
机器学习日记(5)_第3张图片
我们设计出了类似于神经元的神经网络,效果如下:
机器学习日记(5)_第4张图片
其中1, 2, 3是输入单元(input units),我们将原始数据输入给它们。1, 2, 3是中间单元,它们负责将数据进行处理,然后呈递到下一层。最后是输出单元,它负责计算ℎ()。
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下
一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit)。
机器学习日记(5)_第5张图片
下面引入一些标记法来帮助描述模型:
() 代表第 层的第 个激活单元。()代表从第 层映射到第 + 1 层时的权重的矩阵,例如(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 + 1层的激活单元数量为行数,以第 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中(1)的尺寸为 3*4。
对于上图所示的模型,激活单元和输出分别表达为:
1(2) = (10(1)0 + 11(1)1 + 12(1)2 +13(1)3)
2(2) = (20(1)0 + 21(1)1 + 22(1)2 + 23(1)3)
3(2) = (30(1)0 + 31(1)1 + 32(1)2 + 33(1)3)
() = (10(2)0(2) + 11(2)1(2) + 12(2)2(2) + 13(2)3(2))
上面进行的讨论中只是将特征矩阵中的一行(一个训练实例)喂给了神经网络,我们需要将整个训练集都喂给我们的神经网络算法来学习模型。
我们可以知道:每一个都是由上一层所有的和每一个所对应的决定的。
(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION )) 把, , 分别用矩阵表示,我们可以得到 ⋅ = :
机器学习日记(5)_第6张图片前向传播算法( FORWARD PROPAGATION ) 相对于使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值
机器学习日记(5)_第7张图片我们令 (2) = (1),则 (2) = ((2)) ,计算后添加 0(2) = 1。 计算输出的值为:
机器学习日记(5)_第8张图片
我们令 (3) = (2)(2),则 ℎ() = (3) = ((3))。
这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即
(2) = (1) × ,(2) = ((2))
为了更好了了解 Neuron Networks 的工作原理,我们先把左半部分遮住:
机器学习日记(5)_第9张图片
右半部分其实就是以0, 1, 2, 3, 按照逻辑回归的方式输出ℎ():
() = (10(2)0(2) + 11(2)1(2) + 12(2)2(2) + 13(2)3(2))
其实神经网络就像是 逻辑回归,只不过我们把 逻辑回归
中的输入向量[13] 变成了中间层的[1(2)3(2)],我们可以把0, 1, 2, 3看成更为高级的特征值,也就是0, 1, 2, 3的进化体,并且它们是由 与决定的,因为是梯度下降的,所以是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 次方厉害,也能更好的预测新数据。这就是神经网络相比于逻辑回归和线性回归的优势。

特征和直观理解

从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征1, 2, . . . , ,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
举例说明:逻辑与(AND);下图中左半部分是神经网络的设计与 output 层表达式,右边上部分是 sigmod 函数,下半部分是真值表。我们可以用这样的一个神经网络表示 AND 函数:
机器学习日记(5)_第10张图片
其中0=−30, 1=20, 2=20 我们的输出函数ℎ()即为:ℎ() = (−30 + 201 +202),我们知道()的图像是:
机器学习日记(5)_第11张图片
机器学习日记(5)_第12张图片
所以我们有:ℎ() ≈ x1ANDx2
同理有:OR 函数
机器学习日记(5)_第13张图片
我们可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。例如我们要实现 XNOR 功能(输入的两个值必须一样,均为 1 或均为 0),即:XNOR = (x1 ANDx2) OR((NOT x1)AND(NOT x2)),首先构造一个能表达(NOT x1)AND(NOT x2)部分的神经元:
机器学习日记(5)_第14张图片
然后将表示 AND 的神经元和表示(NOT x1)AND(NOT x2)的神经元以及表示 OR 的神经元进行组合
机器学习日记(5)_第15张图片
我们就得到了一个能实现 XNOR 运算符功能的神经网络。
按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。
这就是神经网络的厉害之处。

多类分类(Multiclass Classification)

当我们有不止两种分类时(也就是 = 1,2,3 ….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4 个值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。输入向量有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现[ ],且, , , 中仅有一个为 1,表示当前类。下面是该神经网络的可能结构示例:
机器学习日记(5)_第16张图片
神经网络算法的输出结果为四种可能情形之一:
机器学习日记(5)_第17张图片

你可能感兴趣的:(机器学习,神经网络,深度学习)