机器学习之旅(四)

吴恩达教授的机器学习课程的第四周相关内容:

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

1.1、非线性假设( Non-linear Hypotheses )

我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即: 当特征太多时,计算的负荷会非常大。
之前我们已经看到过,使用非线性的多项式项, 能够帮助我们建立更好的分类模型。假
设我们有非常多的特征,例如大于 100 个变量,我们希望用这 100 个特征来构建一个非线性
的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合, 我们也会有接近 5000(100*100/2))个组合而成的特征。这对于一般的逻辑回归来说需要计算的特征太多了。
普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。
小结:线性回归和逻辑回归特征的局限性。

1.2、神经元和大脑( Neurons and the Brain)

神经网络是一种很古老的算法,它最初产生的目的是制造能模拟大脑的机器。
从某种意义上来说,如果我们能找出大脑的学习算法,然后在计算机上执行大脑学习算法或与之相似的算法,也许这将是我们向人工智能迈进做出的最好的尝试。人工智能的梦想就是:有一天能制造出真正的智能机器。
小结:模仿人类大脑。

1.3、模型表示 ( Model Representation)

为了构建神经网络模型,我们需要首先思考大脑中的神经网络是怎样的?每一个神经元都可以被认为是一个处理单元/神经核(processing unit/ Nucleus),它含有许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon)。神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
在这里插入图片描述
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元, activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输
出。在神经网络中,参数又可被成为权重(weight)。我们设计出了类似于神经元的神经网络, 效果如下:
在这里插入图片描述
其中 x1 , x2 , x3 是输入单元(input units),我们将原始数据输入给它们。a1 , a2 , a3 是中间单元,它们负责将数据进行处理,然后呈递到下一层。最后是输出单元,它负责计算 假设函数h。神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
在这里插入图片描述
下面引入一些标记法来帮助描述模型:
a i ( j ) a_{i}^{\left ( j \right )} 代表第 j 层的第 i 个激活单元。 θ ( j ) \theta ^{\left ( j \right )} 代表从第 j 层映射到第 j+1 层时的权重的矩阵,例如 θ ( 1 ) \theta ^{\left ( 1 \right )} 代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第 j+1 层的激活单元数量为行数,以第 j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中 θ ( 1 ) \theta ^{\left ( 1 \right )} 的尺寸为 3*4。
对于上图所示的模型,激活单元和输出分别表达为:
在这里插入图片描述
我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION )
( FORWARD PROPAGATION ) 相对于与使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值:
在这里插入图片描述
我们令 z ( 2 ) = θ ( 1 ) x z^{\left ( 2\right )}=\theta ^{\left ( 1 \right )}x ,则 a ( 2 ) = g ( z ( 2 ) ) a^{\left ( 2 \right )}=g\left ( z ^{\left ( 2 \right )}\right ) ,计算后添加 a 0 ( 2 ) = 1 a_{0}^{\left ( 2 \right )}=1 。 计算输出的值为:
在这里插入图片描述
我们令 z ( 3 ) = θ ( 2 ) a ( 2 ) z^{\left ( 3\right )}=\theta ^{\left ( 2 \right )} a^{\left ( 2 \right )} ,则 h θ ( x ) = a ( 3 ) = g ( z ( 3 ) ) h_{\theta }\left ( x \right )=a^{\left ( 3 \right )}=g\left ( z ^{\left ( 3 \right )}\right )
这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,
我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:
z ( 2 ) = θ ( 1 ) × X z^{\left ( 2\right )}=\theta ^{\left ( 1 \right )}\times X^{\top } , a ( 2 ) = g ( z ( 2 ) ) a^{\left ( 2 \right )}=g\left ( z ^{\left ( 2 \right )}\right )
我们可以把 a 0 , a 1 , a 2 , a 3 a_{0},a_{1},a_{2},a_{3} 看成更为高级的特征值,也就是 x 0 , x 1 , x 2 , x 3 x_{0},x_{1},x_{2},x_{3} 的进化体,并且它
们是由 x 与 θ \theta 决定的,因为是梯度下降的,所以 a 是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅将 x 次方厉害,也能更好的预测新数据。
这就是神经网络相比于逻辑回归和线性回归的优势。
小结:神经网络通常包括输入层、隐藏层、输出层,将逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。

1.4、样本和直观理解(Examples and Intuitions)

神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑 AND、逻辑或 OR 。
举例说明:逻辑与 AND;下图中左半部分是神经网络的设计与 output 层表达式,右边上部分是 sigmod 函数,下半部分是真值表。
我们可以用这样的一个神经网络表示 AND 函数:
在这里插入图片描述
其中 θ 0 = 30 θ 1 = 20 θ 2 = 20 \theta_{0}=-30,\theta_{1}=20,\theta_{2}=20
我们的输出函数 h θ ( x ) h_{\theta }\left ( x \right ) 即为:
h θ ( x ) = g ( 30 + 20 x 1 + 20 x 2 ) h_{\theta }\left ( x \right )=g\left ( -30+20x_{1}+20x_{2} \right )
我们知道 g(x)的图像是:
在这里插入图片描述
所以我们有: h θ ( x ) x 1 A N D x 2 h_{\theta }\left ( x \right )\approx x_{1} AND x_{2}
这就是 AND 函数。(NOT/OR/XNOR等相似不再介绍)。
小结:这种表示方法可以更易理解神经网络。

1.5、多类分类(Multiclass Classification)

当我们有不止两种分类时(也就是 y=1,2,3….),比如以下这种情况,该怎么办? 如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4 个
值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。输入向量 x 有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现 [ a b c d ] \begin{bmatrix} a & b & c & d\end{bmatrix}^{\top } ,且 a,b,c,d 中仅有一个为 1,表示当前类。 下面是该神经网络的可能结构示例:
在这里插入图片描述

2、第四周编程题

1、lrCostFunction.m,
J = -(y’log(sigmoid(Xtheta))+(1-y)'log(1-sigmoid(Xtheta)))/m+lambda/2/msum((theta(2:length(theta))).^2);
grad= (X’
(sigmoid(Xtheta)-y))/m;
temp=theta;
temp(1)=0;
grad=grad+lambda/m
temp;
和第三周编程题的costFunctionReg.m一样。

2、oneVsAll.m,
initial_theta = zeros(n + 1, 1);
options = optimset(‘GradObj’, ‘on’, ‘MaxIter’, 50);

for c=1:num_labels
all_theta(c,:)=fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)),initial_theta,options);
end
当c是标量、y是矩阵时,y==c表示y的第c个位置处为1,其他位置为0的逻辑向量。

3、predictOneVsAll.m
[a,p]=max(Xall_theta’,[],2);=号后面的式子表示取Xall_theta’的每行的最大值组成一个列向量,a就是这个列向量,p是这个列向量的每个值的列索引(即其所在的列数)

4、predict.m
X=[ones(size(X,1),1),X];
a=sigmoid(XTheta1’);
a=[ones(size(a,1),1),a];
b=sigmoid(a
Theta2’);
[maxx,p]=max(b,[],2);
3层神经网络的计算,层层递进。

猜你喜欢

转载自blog.csdn.net/qq_42722278/article/details/82901118
今日推荐