斯坦福Machine Learning Week4总结(包括作业)

第一讲:神经网络(Neural Network)的有关背景

对于一个非线性(non-linear)的分类问题,当特征数较少时,可以通过多项式拟合出决策边界(decision boundary)。然而对于一个现实问题,特征数往往很多,这时多项式项的个数就会变得很多,因为你想要去更好的拟合样本。此时会存在一些问题,比如运算量过大,容易出现会过拟合(over-fitting)的情况。

神经网络就是为了解决上述问题而存在的。神经网络在上个世纪80,90年代初期被广泛应用,90年代后期变得不再那么流行。而最近神经网络东山再起,一个原因是计算机的运算能力得到了增强。


第二讲:神经网络的模型

神经网络的灵感来自于人类大脑中的神经元,神经元的树突接受其它神经元的输入信息,通过细胞体进行计算,最后树突再将计算结果输出至其它神经元。对应的神经网络也就大致分成了三个部分,分别是输入层(input layer),隐藏层(hidden layer),输出层(output layer)。下面还是通过Ng课程上的PPT来进行复习吧。


这就是一个简单的三层神经网络,除了输出层之外,其它层都有一个偏置单位(Bias Unit),且值都等于1.我记得在前边几周讲线性回归的时候,也有一个类似于偏置单位的项存在。应该是a0 * x0,目的我有点忘了,等过几天总结前几周的时候再提吧。第二层的参数是通过第一层的权重矩阵和第一层的输入参数运算得到的。具体运算过程如下。

除了输出层每一层都有一个权重矩阵(weights matrix),维数是这样确定的:如何第j层有sj个单元,j+1层有s(j+1)个单元,第j层的权重矩阵的维数是s(j+1) * (sj + 1)。这里的+1是因为sj层的偏置单元,也就是说输出层不包含偏置单元(无需计算,等于1),而输入层是包含了偏置单元(因为要参与运算)。具体运算过程如下图,假设Theta是sj层的权重矩阵,X是sj层的列向量,sigmoid(Theta * X)就好了。

后面几张PPT没啥讲的,就是详细的说了一下上述的运算过程。还有通过神经网络模拟了一些逻辑运算符的运算过程,有一个直观的感受。最后讲了Multiclass Classification,还有一种方法叫One-vs-all。这种方法的期望效果就是令输出为一串0或者1,其中只有一个1,其它的都是零,值等于1的位置对应的分类结果就是最后的识别结果。


下面来说一下本周的编程作业。

本周作业分成两个部分,第一部分是完成三个文件 IrCostFunction.m oneVsAll.m predictOneVsAll.m

IrCostFunction是要计算一个正则化逻辑回归的代价函数值和梯度。这个的方法和上周作业基本是相同的。然而作业的guide ex3.pdf里面让你先实现非正则化的形式。在实现代价函数的时候根据guide我是这么写的:

hx = sigmoid(sum(X .* theta', 2));
然而根据上一周的经验,其实这么写就行了

hx = sigmoid(Theta * X);
有点不清楚guide是什么意思,为了让我们熟悉矩阵的性质吗?后面是这么写的。

J = (-1 / m) * sum(y .* log(hx) + (1 - y) .* log(1 - hx)); 

grad = (1 / m) * (X' * (hx - y));

temp = theta;
temp(1) = 0;
J 	 += (lambda / 2 / m) * sum(temp .* temp);
grad += (lambda / m) * temp;


在正则化的时候,方法有几个,我是将theta(1)的值设置为零,因为对应的偏置单位是不参与正则项的累加计算的,所以把theta(1)设置成零就可以了。


下面是oneVsAll.m 

for c = 1:num_labels
	% Set Initial theta
	initial_theta = zeros(n + 1, 1);
     
	% Set options for fminunc
    options = optimset('GradObj', 'on', 'MaxIter', 50);
	% Run fmincg to obtain the optimal theta
	% This function will return theta and the cost 
    [theta] = ...
        fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
                initial_theta, options);
	all_theta(c,:) = theta';
end;

这个文件就是用fmicg自动进行梯度下降算法的执行,上周作业有用过fminunc,使用方法类似,设置好参数就可以了。不过有一点需要注意,这里要用logical arrays来传参数。


predictOneVsAll.m

[x,p] = max(all_theta * X');

这里也没多少说的,像我这个线代不好的,就把维数写在纸上,理解了过程,最后注意用max函数就好了。max函数也可以传一个维度的参数,对于矩阵默认累加列。max函数也可以返回第一个最大值的索引。这里p接收索引,具体的用help max来查看max函数的帮助。


predict.m

X 	  = [ones(m, 1) X];
temp  = sigmoid(Theta1 * X');
temp  = [ones(1, size(X,1)); temp];
[x,p] = max(sigmoid(Theta2 * temp));


这里主要是记得给参数矩阵加一列偏置单元,包括第二层。max的使用和上边一样






Coursera机器学习是由斯坦福大学教授Andrew Ng主讲的一门在线课程,旨在向学习者介绍机器学习的基本概念、算法和应用。该课程涵盖了监督学习、无监督学习、深度学习等多个方面,通过理论讲解和实践编程作业,帮助学习者掌握机器学习的基本原理和实践技能。该课程是Coursera平台上最受欢迎的课程之一,也是机器学习领域入门的重要资源之一。 ### 回答2: Coursera机器学习是由斯坦福大学Andrew Ng教授设计并教授的在线课程。这门课程被认为是公认的机器学习入门教材之一,也是Coursera平台最受欢迎的课程之一。 这门课程涵盖了机器学习领域中最基础的知识和技术,包括监督学习、无监督学习以及神经网络等。学生可以通过该课程了解到如何采集和处理数据、如何训练模型、如何评估模型的性能等。此外,课程还涉及到机器学习中一些实用的技术,如正则化、梯度下降等。 该课程受到了全球范围内的认可和青睐,许多学生、工程师、数据科学家等都受益于该课程。由于该课程的知识点全面、深入浅出、容易理解和学习,在业内和学术界都广受赞誉,拥有较高的知名度和价值。 总之,Coursera机器学习是一门非常好的课程,对于那些对机器学习感兴趣的人来说,它是一个不可错过的机会。课程教材内容丰富、难度适中,且教学相对轻松愉悦,难怪在学习资源上产生了广泛的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值