吴恩达机器学习

 

吴恩达机器学习

1.Intro

1.1 welcome

随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用在各行各业中,可谓无处不在。

一些常见的机器学习的应用,例如:

  • 手写识别
  • 垃圾邮件分类
  • 搜索引擎
  • 图像处理

使用到机器学习的一些案例:

  • 数据挖掘

    • 网页点击流数据分析
  • 人工无法处理的工作(量大)

    • 手写识别
    • 计算机视觉
  • 个人定制

    • 推荐系统
  • 研究大脑

  • ……

1.2 什么是机器学习

  1. 机器学习定义 这里主要有两种定义:
  • Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.

    这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟。他编写了一个程序,但没有显式地编程每一步该怎么走,而是让计算机自己和自己对弈,并不断地计算布局的好坏,来判断什么情况下获胜的概率高,从而积累经验,好似学习,最后,这个计算机程序成为了一个比他自己还厉害的棋手。

  • Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.

    Tom Mitchell 的定义更为现代和正式。在过滤垃圾邮件这个例子中,电子邮件系统会根据用户对电子邮件的标记(是/不是垃圾邮件)不断学习,从而提升过滤垃圾邮件的准确率,定义中的三个字母分别代表:

    • T(Task): 过滤垃圾邮件任务。
    • P(Performance): 电子邮件系统过滤垃圾邮件的准确率。
    • E(Experience): 用户对电子邮件的标记。

2.不同的机器学习算法

主要有两部分:

1、监督学习

2、非监督学习

两者的区别为是否需要人工参与数据结果的标注。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~

其他:Reinforcement Learning&recommender systems

还有一些算法也属于机器学习领域,诸如:

  • 半监督学习: 介于监督学习于无监督学习之间
  • 推荐算法: 没错,就是那些个买完某商品后还推荐同款的某购物网站所用的算法。
  • 强化学习: 通过观察来学习如何做出动作,每个动作都会对环境有所影响,而环境的反馈又可以引导该学习算法。
  • 迁移学习

最主要的:应用

1.3 监督学习

监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入和对应的结果即训练集,建模拟合,最后让计算机预测未知数据的结果。(我们被告知什么是正确的答案)

监督学习一般有两种:

  1. 回归问题(Regression)

    回归问题即为预测一系列的连续值。continuous value output

    在房屋价格预测的例子中,给出了一系列的房屋面基数据,根据这些数据来预测任意面积的房屋价格。给出照片-年龄数据集,预测给定照片的年龄。

    曲线的拟合是可以自由选择的,不一定是直线,也可以是任何一种曲线

image-20201005234811104

2.分类问题(Classification)

分类问题即为预测一系列的离散值

即根据数据预测被预测对象属于哪个分类。

视频中举了癌症肿瘤这个例子,针对诊断结果,分别分类为良性或恶性。还例如垃圾邮件分类问题,也同样属于监督学习中的分类问题。

img

对于数据集的标注,我们可以上升到高维空间,来进行聚类的处理,维数对应的是feature的个数

视频中提到支持向量机这个算法,旨在解决当特征量很大的时候(特征即如癌症例子中的肿块大小,颜色,气味等各种特征),计算机内存一定会不够用的情况。支持向量机能让计算机处理无限多个特征

image-20201005235445436

Q:You’re running a company, and you want to develop learning algorithms to address each of two problems. Problem 1:You have a large inventory of identical items. You want to predict how many of these items will sell over the next 3 months.

Problem 2: You’d like software to examine individual customer accounts, and for each account decide if it has been hacked/compromised. Should you treat these as classification or as regression problems?

A:Treat problem 1 as a regression problem, problem 2 as a classification problem.

Ex:这个第一个问题是连续的预测,我们对于销量这个量是连续的,这是个连续量,对于是否被黑就是离散的是和否的问题

1.4 无监督学习

算法并没有提前知道正确答案,我们只能自己归纳出答案

相对于监督学习,训练集不会有人为标注的结果(无反馈),我们不会给出结果或无法得知训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。

无监督学习一般分为两种:

  1. 聚类(Clustering)

    • 新闻聚合
    • DNA 个体聚类
    • 天文数据分析
    • 市场细分
    • 社交网络分析
  2. 非聚类(Non-clustering)

    • 鸡尾酒问题

新闻聚合

在例如谷歌新闻这样的网站中,每天后台都会收集成千上万的新闻,然后将这些新闻分组成一个个的新闻专题,这样一个又一个聚类,就是应用了无监督学习的结果。

鸡尾酒问题

img

在鸡尾酒会上,大家说话声音彼此重叠,几乎很难分辨出面前的人说了什么。我们很难对于这个问题进行数据标注,而这里的通过机器学习的无监督学习算法,就可以将说话者的声音同背景音乐分离出来,看视频,效果还不错呢~~。

嗯,这块是打打鸡血的,只需要一行代码就解决了问题,就是这么简单!当然,我没复现过 _……

神奇的一行代码: [W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

//解线性方程

编程语言建议

在机器学习刚开始时,推荐使用 Octave 类的工程计算编程软件,因为在 C++ 或 Java 等编程语言中,编写对应的代码需要用到复杂的库以及要写大量的冗余代码,比较耗费时间,建议可以在学习过后再考虑使用其他语言来构建系统。 另外,在做原型搭建的时候也应该先考虑使用类似于 Octave 这种便于计算的编程软件,当其已经可以工作后,才将模型移植到其他的高级编程语言中。

Of the following examples, which would you address using an unsupervised learning algorithm? (Check all that apply.)

Given email labeled as spam/not spam, learn a spam filter.

Given a set of news articles found on the web, group them into sets of articles about the same stories.

Given a database of customer data, automatically discover market segments and group customers into different market segments.

Given a dataset of patients diagnosed as either having diabetes or not, learn to classify new patients as having diabetes or not.

A:2,3

Quiz:

Quiz Question 1 A computer program is said to learn from experience E with respect to some task T and some performance measure P if its performance on T, as measured by P, improves with experience E. Suppose we feed a learning algorithm a lot of historical weather data, and have it learn to predict weather. In this setting, what is E?

Answer The process of the algorithm examining a large amount of historical weather data.

Explanation T := The weather prediction task. P := The probability of it correctly predicting a future date’s weather. E := The process of the algorithm examining a large amount of historical weather data.

Question 2 Suppose you are working on weather prediction, and you would like to predict whether or not it will be raining at 5pm tomorrow. You want to use a learning algorithm for this. Would you treat this as a classification or a regression problem?

Answer Classification

Explanation Classification is appropriate when we are trying to predict one of a small number of discrete-valued outputs, such as whether it will rain (which we might designate as class 0), or not (say class 1).

Question 3 Suppose you are working on stock market prediction, and you would like to predict the price of a particular stock tomorrow (measured in dollars). You want to use a learning algorithm for this. Would you treat this as a classification or a regression problem?

Answer Regression

Explanation Regression is appropriate when we are trying to predict a continuous-valued output, since as the price of a stock (similar to the housing prices example in the lectures).

Question 4 Some of the problems below are best addressed using a supervised learning algorithm, and the others with an unsupervised learning algorithm. Which of the following would you apply supervised learning to? (Select all that apply.) In each case, assume some appropriate dataset is available for your algorithm to learn from.

Explanation Take a collection of 1000 essays written on the US Economy, and find a way to automatically group these essays into a small number of groups of essays that are somehow “similar” or “related”. := This is an unsupervised learning/clustering problem (similar to the Google News example in the lectures).

Given a large dataset of medical records from patients suffering from heart disease, try to learn whether there might be different clusters of such patients for which we might tailor separate treatements. := This can be addressed using an unsupervised learning, clustering, algorithm, in which we group patients into different clusters.

Given genetic (DNA) data from a person, predict the odds of him/her developing diabetes over the next 10 years. := This can be addressed as a supervised learning, classification, problem, where we can learn from a labeled dataset comprising different people’s genetic data, and labels telling us if they had developed diabetes.

Given 50 articles written by male authors, and 50 articles written by female authors, learn to predict the gender of a new manuscript’s author (when the identity of this author is unknown). := This can be addressed as a supervised learning, classification, problem, where we learn from the labeled data to predict gender.

In farming, given data on crop yields over the last 50 years, learn to predict next year’s crop yields. := This can be addresses as a supervised learning problem, where we learn from historical data (labeled with historical crop yields) to predict future crop yields.

Examine a large collection of emails that are known to be spam email, to discover if there are sub-types of spam mail. := This can addressed using a clustering (unsupervised learning) algorithm, to cluster spam mail into sub-types.

Examine a web page, and classify whether the content on the web page should be considered “child friendly” (e.g., non-pornographic, etc.) or “adult.” := This can be addressed as a supervised learning, classification, problem, where we can learn from a dataset of web pages that have been labeled as “child friendly” or “adult.”

Examine the statistics of two football teams, and predicting which team will win tomorrow’s match (given historical data of teams’ wins/losses to learn from). := This can be addressed using supervised learning, in which we learn from historical records to make win/loss predictions.

Question 5 Which of these is a reasonable definition of machine learning?

Answer Machine learning is the field of study that gives computers the ability to learn without being explicitly programmed.

Explanation This was the definition given by Arthur Samuel (who had written the famous checkers playing, learning program).

2.单变量线性回归

2.1 Model Represent

  1. 房价预测训练集
Size in ()Price ($) in 1000's()
2104460
1416232
1534315
852178

房价预测训练集中,同时给出了输入 和输出结果 ,即给出了人为标注的”正确结果“,且预测的量是连续的,属于监督学习中的回归问题。

m=训练集的元素数

x=自变量

y=因变量

(x,y)单个训练样本.可以用上下标表示训练集的标号,X和Y属于R

2.问题解决模型

img

其中h代表结果函数,也称为假设(hypothesis) 。假设函数根据输入(房屋的面积),给出预测结果输出(房屋的价格),即是一个 的映射。

x: 特征/输入变量。y代表输出变量

上式中, 为参数, 的变化才决定了输出结果,不同以往,这里的 被我们视作已知(不论是数据集还是预测时的输入),所以怎样解得 以更好地拟合数据,成了求解该问题的最终问题。

单变量,即只有一个特征(如例子中房屋的面积这个特征)。

2.2 代价函数(Cost Function)

李航《统计学习方法》一书中,损失函数与代价函数两者为同一概念,未作细分区别,全书没有和《深度学习》一书一样混用,而是统一使用损失函数来指代这类类似概念。

吴恩达(Andrew Ng)老师在其公开课中对两者做了细分。如果要听他的课做作业,不细分这两个概念是会被打小手扣分的!这也可能是因为老师发现了业内混用的乱象,想要治一治吧。

损失函数(Loss/Error Function): 计算单个样本的误差。link

代价函数(Cost Function): 计算整个训练集所有损失函数之和的平均值

 

综合考虑,本笔记对两者概念进行细分,若有所谬误,欢迎指正。

机器学习中的目标函数、损失函数、代价函数有什么区别?- 知乎

用一个线性函数image-20201011225142294

 

我们的目的在于求解预测结果 最接近于实际结果y时\theta的取值,则问题可表达为求解

的最小值

M: 训练集中的样本总数

y: 目标变量/输出变量

(x,y): 训练集中的实例

(x(i),y(i)): 先训练集中的第 个样本实例

img

上图展示了当\theta取不同值时, 对数据集的拟合情况,蓝色虚线部分代表建模误差(预测结果与实际结果之间的误差),我们的目标就是最小化所有误差之和。

为了求解最小值,引入代价函数(Cost Function)概念,用于度量建模误差。考虑到要计算最小值,应用二次函数对求和式建模,即应用统计学中的平方损失函数(最小二乘法):

image-20201011223045949

y^: 的预测值

1/2系数 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 。

讨论到这里,我们的问题就转化成了求解J的最小值

2.3 代价函数 – 直观理解1(Cost Function – Intuition I)

根据上节视频,列出如下定义:

  • 假设函数(Hypothesis): image-20201011231937292

  • 参数(Parameters): image-20201011231948686

  • 代价函数(Cost Function):

  • image-20201011232001935

  • 目标(Goal):

    image-20201011232017057

为了直观理解代价函数到底是在做什么,先假设 ,并假设训练集有三个数据,分别为,这样在平面坐标系中绘制出 ,并分析\theta的变化。

img

右图 随着 的变化而变化,可见当 时,,取得最小值,对应于左图青色直线,即函数 拟合程度最好的情况。

2.4 代价函数 – 直观理解2(Cost Function – Intuition II)

注:该部分由于涉及到了多变量成像,可能较难理解,要求只需要理解上节内容即可,该节如果不能较好理解可跳过。

给定数据集:

img

参数在 不恒为 时代价函数 关于 的3-D图像,图像中的高度为代价函数的值。

img

由于3-D图形不便于标注,所以将3-D图形转换为轮廓图(contour plot),下面用轮廓图(下图中的右图)来作直观理解,其中相同颜色的一个圈代表着同一高度(同一 J值)。

0=360,1=0 时:

img

大概在0=250,1=0.12时:

每个椭圆上的点,代价函数是一样的

img

上图中最中心的点(红点),近乎为图像中的最低点,也即代价函数的最小值,此时对应假设函数对数据的拟合情况如左图所示,嗯,一看就拟合的很不错,预测应该比较精准啦。

越靠近椭圆的中心,J越小,越好

2.5 梯度下降(Gradient Descent)

在特征量很大的情况下,即便是借用计算机来生成图像,人工的方法也很难读出 的最小值,并且大多数情况无法进行可视化,故引入梯度下降(Gradient Descent)方法,让计算机自动找出最小化代价函数时对应的 值。

梯度下降背后的思想是:开始时,我们随机选择一个参数组合即起始点,计算代价函数,然后寻找下一个能使得代价函数下降最多的参数组合。不断迭代,直到找到一个局部最小值(local minimum),由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是全局最小值(global minimum),不同的初始参数组合,可能会产生不同的局部最小值。

下图根据不同的起始点,产生了两个不同的局部最小值。

$img$

视频中举了下山的例子,即我们在山顶上的某个位置,为了下山,就不断地看一下周围下一步往哪走下山比较快,然后就迈出那一步,一直重复,直到我们到达山下的某一处陆地

梯度下降公式:

image-20201012224905036

:=赋值表达式

/theta_j: 第 个特征参数

”:=“: 赋值操作符

/alpha: 学习速率(learning rate),

image-20201012224655239

是个函数每个就是要求的值

公式中,学习速率决定了参数值变化的速率即”走多少距离“,而偏导这部分决定了下降的方向即”下一步往哪里“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”陆地“。

img

注意,在计算时要批量更新,即如上图中的左图所示,否则结果上会有所出入,原因不做细究。

 

image-20201012232234960

2.6 梯度下降直观理解(Gradient Descent Intuition)

该节探讨 的梯度下降更新过程,即 image-20201012232535261

img

把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 在初始点处有正斜率,也就是说它有正导数,则根据梯度下降公式 , 右边的结果是一个正值,即会向左边移动。这样不断重复,直到收敛(达到局部最小值,即斜率为0)。

初始值(初始点)是任意的,若初始点恰好就在极小值点处,梯度下降算法将什么也不做()。

不熟悉斜率的话,就当斜率的值等于图中三角形的高度除以水平长度好啦,精确地求斜率的方法是求导。

对于学习速率 ,需要选取一个合适的值才能使得梯度下降算法运行良好。

  • 学习速率过小图示:

    img

    收敛的太慢,需要更多次的迭代。

  • 学习速率过大图示:

    img

    可能越过最低点,甚至导致无法收敛。

学习速率只需选定即可,不需要在运行梯度下降算法的时候进行动态改变,随着斜率越来越接近于0,代价函数的变化幅度会越来越小,直到收敛到局部极小值。

当遇到局部最小值的时候,就不要动,保存下当前的元组即可

如图,品红色点为初始点,代价函数随着迭代的进行,变化的幅度越来越小。

img

最后,梯度下降不止可以用于线性回归中的代价函数,还通用于最小化其他的代价函数。

2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression)

线性回归模型

image-20201012235936899

梯度下降算法

image-20201012235948555

直接将线性回归模型公式代入梯度下降公式可得出公式

img时,线性回归中代价函数求导的推导过程:

image-20201012235833470

所以当时:

image-20201013000147387

在这里恒定为1!

所以当

image-20201013000206869

上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集 更新。

由于线性回归函数呈现碗状,且只有一个全局的最优值,所以函数一定总会收敛到全局最小值(学习速率不可过大)。同时,函数 被称为凸二次函数,而线性回归函数求解最小值问题属于凸函数优化问题

img

另外,使用循环求解,代码较为冗余,后面会讲到如何使用向量化(Vectorization)来简化代码并优化计算,使梯度下降运行的更快更好。

解法:就是对于训练集的每一个训练元素,让其结果的值与x相乘求和即可

Quiz:

1.Let f be some function so that

f(θ0,θ1) outputs a number. For this problem,

f is some arbitrary/unknown smooth function (not necessarily the

cost function of linear regression, so f may have local optima).

Suppose we use gradient descent to try to minimize f(θ0,θ1) as a function of θ0 and θ1. Which of the

following statements are true? (Check all that apply.)

Answers:

True or FalseStatementExplanation
TrueIf the learning rate is too small, then gradient descent may take a very long time to converge.If the learning rate is small, gradient descent ends up taking an extremely small step on each iteration, and therefor can take a long time to converge
TrueIf θ0 and θ1 are initialized at a local minimum, then one iteration will not change their values.At a local minimum, the derivative (gradient) is zero, so gradient descent will not change the parameters.
FalseEven if the learning rate α is very large, every iteration of gradient descent will decrease the value of f(θ0,θ1).If the learning rate is too large, one step of gradient descent can actually vastly “overshoot” and actually increase the value of .
FalseIf θ0 and θ1 are initialized so that θ0=θ1, then by symmetry (because we do simultaneous updates to the two parameters), after one iteration of gradient descent, we will still have θ0=θ1.The updates to θ0 and θ1 are different (even though we’re doing simulaneous updates), so there’s no particular reason to update them to be same after one iteration of gradient descent.
True or FalseStatementExplanation
TrueIf the first few iterations of gradient descent cause f(θ0,θ1) to increase rather than decrease, then the most likely cause is that we have set the learning rate to too large a valueif alpha were small enough, then gradient descent should always successfully take a tiny small downhill and decrease f(θ0,θ1) at least a little bit. If gradient descent instead increases the objective value, that means alpha is too large (or you have a bug in your code!).
FalseNo matter how θ0 and θ1 are initialized, so long as learning rate is sufficiently small, we can safely expect gradient descent to converge to the same solutionThis is not true, depending on the initial condition, gradient descent may end up at different local optima.
FalseSetting the learning rate to be very small is not harmful, and can only speed up the convergence of gradient descent.If the learning rate is small, gradient descent ends up taking an extremely small step on each iteration, so this would actually slow down (rather than speed up) the convergence of the algorithm.

2.Suppose that for some linear regression problem (say, predicting housing prices as in the lecture), we have some training set, and for our training set we managed to find some θ0, θ1such that J(θ0,θ1)=0.

Which of the statements below must then be true? (Check all that apply.)

Answers:

True or FalseStatementExplanation
FalseFor this to be true, we must have y(i)=0 for every value of i=1,2,…,m.So long as all of our training examples lie on a straight line, we will be able to find θ0 and θ1) so that J(θ0,θ1)=0. It is not necessary that y(i) for all our examples.
FalseGradient descent is likely to get stuck at a local minimum and fail to find the global minimum.none
FalseFor this to be true, we must have θ0=0 and θ1=0 so that hθ(x)=0If J(θ0,θ1)=0 that means the line defined by the equation “” perfectly fits all of our data. There’s no particular reason to expect that the values of θ0 and θ1 that achieve this are both 0 (unless y(i)=0 for all of our training examples).
TrueOur training set can be fit perfectly by a straight line, i.e., all of our training examples lie perfectly on some straight line.None

Other Options:

True or FalseStatementExplanation
FalseWe can perfectly predict the value of y even for new examples that we have not yet seen. (e.g., we can perfectly predict prices of even new houses that we have not yet seen.)None
FalseThis is not possible: By the definition of J(θ0,θ1), it is not possible for there to exist θ0and θ1 so that=0None
TrueFor these values of θ0 and θ1 that satisfy J(θ0,θ1)=0, we have that for every training example (x(i),y(i))None

3.线性代数基础

跳过了

4.多变量线性回归(Linear Regression with Multiple Variables)

4.1 多特征(Multiple Features)

对于一个要度量的对象,一般来说会有不同维度的多个特征。比如之前的房屋价格预测例子中,除了房屋的面积大小,可能还有房屋的年限、房屋的层数等等其他特征:

这里由于特征不再只有一个,引入一些新的记号

N: 特征的总数

: 代表样本矩阵中第行,也就是第i个训练实例。

: 代表样本矩阵中第i行的第j列,也就是第i个训练实例的第 =j个特征。

image-20201013160310210

参照上图,则有 image-20201013160325254

多变量假设函数 表示为:

对于 ,和单特征中一样,我们将其看作基础数值。例如,房价的基础价格。

参数向量的维度为n+1 ,在特征向量中添加后,其维度也变为n+1, 则运用线性代数,可简化 :

image-20201013160532346

: 矩阵的转置

: 特征向量,我们要解出的值的集合

x: 某个样本的特征向量, n+1维特征量向量

: 为了计算方便我们会假设这个值为1

4.2 多变量梯度下降(Gradient Descent for Multiple Variables)

多变量代价函数类似于单变量代价函数,

image-20201013231008058

前文提到梯度下降对于最小化代价函数的通用性,则多变量梯度下降公式即

image-20201013231021324

解出偏导得:

image-20201013231032742

可展开为:

image-20201013231047033

当然,同单变量梯度下降一样,计算时需要同时更新所有参数.

则得到同时更新参数的向量化(Vectorization)实现:

image-20201020223913706

image-20201013232007269

: 训练集数据, 维矩阵(包含基本特征 ),每一列都是

4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I – Feature Scaling)

在应用梯度下降算法实践时,由于各特征值的范围不一,可能会影响代价函数收敛速度。

以房价预测问题为例,这里选取房屋面积大小和房间数量这两个特征。

下图中,左图是以原始数据绘制的代价函数轮廓图,右图为采用特征缩放(都除以最大值)后图像。左图中呈现的图像较扁,相对于使用特征缩放方法的右图,梯度下降算法需要更多次的迭代。

image-20201017101159144

为了优化梯度下降的收敛速度,采用特征缩放的技巧,使各特征值的范围尽量一致

除了以上图人工选择并除以一个参数的方式,均值归一化(Mean normalization)方法更为便捷,可采用它来对所有特征值统一缩放:

image-20201013234450962

对于特征的范围,并不一定需要使得,类似于等也是可取的,而诸如,就显得过大/过小了。

另外注意,一旦采用特征缩放,我们就需对所有的输入采用特征缩放,包括训练集、测试集、预测输入等。

特征缩放不需要过于精确,但我们需要保证我们的缩放比例已知即可

image-20201017101833031

4.4 梯度下降实践2-学习速率(Gradient Descent in Practice II – Learning Rate)

通常,有两种方法来确定函数是否收敛

  • 多次迭代收敛法

    • 无法确定需要多少次迭代
    • 较易绘制关于迭代次数的图像
    • 根据图像易预测所需的迭代次数
  • 自动化测试收敛法(比较阈值)

    • 不易选取阈值
    • 代价函数近乎直线时无法确定收敛情况

对于梯度下降,一般采用多次迭代收敛法来得出最小化代价函数的参数值,自动化测试收敛法(如设定时判定收敛)则几乎不会被使用。

我们可以通过绘制代价函数关于迭代次数的图像,可视化梯度下降的执行过程,借助直观的图形来发现代价函数趋向于多少时能趋于收敛,依据图像变化情况,确定诸如学习速率的取值,迭代次数的大小等问题。

image-20201017102719614

对于学习速率 ,一般上图展现的为适中情况,下图中,左图可能表明 过大,代价函数无法收敛,右图可能表明 过小,代价函数收敛的太慢。当然, 足够小时,代价函数在每轮迭代后一定会减少。

image-20201017103103463

通过不断改变值,绘制并观察图像,并以此来确定合适的学习速率。 尝试时可取

image-20201017103401441

4.5 特征和多项式回归(Features and Polynomial Regression)

在特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来取代或拆分旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征。

线性回归只能以直线来对数据进行拟合,有时候需要使用曲线来对数据进行拟合,即多项式回归(Polynomial Regression)

比如一个二次方模型:

或者三次方模型:

或者平方根模型:

就把,等看成特征,用线性回归来分析

在使用多项式回归时,要记住非常有必要进行特征缩放,比如 的范围为 1-1000,那么 的范围则为 1- 1000000,不适用特征缩放的话,范围更有不一致,也更易影响效率。

image-20201017104044531

image-20201017104226995

4.6 正规方程(Normal Equation)

对于一些线性回归问题来说,正规方程法给出了一个更好的解决问题的方式。

image-20201017104906532

image-20201017105215063

设计矩阵的构建,y向量就是把标准的值求出来就行了

image-20201017105832201

正规方程法,即令,通过解析函数的方式直接计算得出参数向量的值,Octave/Matlab 代码: theta = inv(X'*X)*X'*y

: 矩阵 的逆,在 Octave 中,inv 函数用于计算矩阵的逆,类似的还有 pinv 函数。

X': 在 Octave 中表示矩阵 X 的转置,即

下表列出了正规方程法与梯度下降算法的对比

条件梯度下降正规方程
是否需要选取需要不需要
是否需要迭代运算需要不需要
特征量大时()适用,不适用, 复杂度高()
适用范围各类模型只适用线性模型,且矩阵需可逆

正规方程法的推导过程

image-20201017105333210

展开上式可得

image-20201017105342446

注意到都为标量,实际上是等价的,则

image-20201017105451014

接下来对求偏导,根据矩阵的求导法则:

image-20201017105457229

所以有:

image-20201017110051958

image-20201017110019100

image-20201017110036145

4.7 不可逆性正规方程(Normal Equation Noninvertibility)

(本部分内容为选讲)

正规方程无法应用于不可逆的矩阵,发生这种问题的概率很小,通常由于

  • 特征之间线性相关

    比如同时包含英寸的尺寸和米为单位的尺寸两个特征,它们是线性相关的

  • 特征数量大于训练集的数量。

如果发现 的结果不可逆,可尝试:

  • 减少多余/重复特征
  • 增加训练集数量
  • 使用正则化(后文)

对于这类不可逆的矩阵,我们称之为奇异矩阵退化矩阵

这种情况下,如果还想使用正规方程法,在Octave中,可以选用 pinv 函数,pinv 区别于 invpinv 函数被称为伪逆函数,在矩阵不可逆的时候,使用这个函数仍可正确地计算出的值。

Quiz

第一题 Suppose m=4 students have taken some class, and the class had a midterm exam and a final exam. You have collected a dataset of their scores on the two exams, which is as follows:

midterm exam(midterm exam)^2final exam
89792196
72518474
94883687
69476178

You’d like to use polynomial regression to predict a student’s final exam score from their midterm exam score. Concretely, suppose you want to fit a model of the form , where is the midterm score and is. Further, you plan to use both feature scaling (dividing by the “max-min”, or range, of a feature) and mean normalization.

What is the normalized feature ? (Hint: midterm = 69, final = 78 is training example 4.) Please round off your answer to two decimal places and enter in the text box below.

答案:0.28。 先求出特征值的均值: 最大-最小:94-69=25 x_2^(4):(94-81)/25 = 0.52

第二题 You run gradient descent for 15 iterations withα=0.3 and compute J(θ) after each iteration. You find that the value of J(θ) decreases slowly and is still decreasing after 15 iterations. Based on this, which of the following conclusions seems most plausible?

A:Rather than use the current value of α, it’d be more promising to try a larger value of α (say α=1.0). B:α=0.3 is an effective choice of learning rate. C:Rather than use the current value of α, it’d be more promising to try a smaller value of α (say α=0.1).

选:A。 迭代次数多,下降缓慢是α过小,增大α值

第三题 Suppose you have m=14 training examples with n=3 features (excluding the additional all-ones feature for the intercept term, which you should add). The normal equation is . For the given values of mm and nn, what are the dimensions of θ, X, and y in this equation?

A:X is 14×3, y is 14×1, θ is 3×3 B:X is 14×4, y is 14×4, θ is 4×4 C:X is 14×3, y is 14×1, θ is 3×1 D:X is 14×4, y is 14×1, θ is 4×1

选:D。 为m×(n+1),即14×4, 为m×1,即14×1 为(n+1)×m,即4×14, 为(n+1)×(n+1),即4×4

第四题 Suppose you have a dataset with m = 50 examples and n = 200000 features for each example. You want to use multivariate linear regression to fit the parameters θ to our data. Should you prefer gradient descent or the normal equation?

A:Gradient descent, since it will always converge to the optimal θ. B:The normal equation, since gradient descent might be unable to find the optimal θ. C:The normal equation, since it provides an efficient way to directly find the solution. D:Gradient descent, since (X^T X)^{-1} will be very slow to compute in the normal equation.

选:D。 n上万就不要选normal equation,因为 计算很慢。

第五题 Which of the following are reasons for using feature scaling?

A:It prevents the matrix (used in the normal equation) from being non-invertable (singular/degenerate). B:It speeds up gradient descent by making it require fewer iterations to get to a good solution. C:It is necessary to prevent gradient descent from getting stuck in local optima. D:It speeds up solving for θ using the normal equation.

选:B。

5.Octave Tutorial

5.1 基本操作

1.基本的四则运算是可以直接算出来的 2.~= 是非运算 3.PS1('>>'); 4.可以声明变量并访问 5.disp():输出 可以内嵌spintf进行C类型的输出:disp(sprintf(‘……’)%(参数表)) 6.矩阵:A=[1 2 ;3 4 ;5 6 ;]:生成了一个矩阵,向量亦同 7.A=%d:%d:%d第一个数:开始值,第二个:步长,第三个:最终值,生成一个向量 8.ones(1,3)生成全为1的矩阵 9.zeros(1,3)生成全为0的矩阵 10.rand(1,3)生成全为随机数的矩阵 11.randn(1,3)生成一个全为随机数的矩阵,不过这个矩阵的数据方差为1 12.hist(向量,格子数) 13.eye()生成单位矩阵

5.2 移动数据

1.size(A):返回矩阵大小 size(A,%d)第%d个维度的元素数 3.length(A)返回矩阵最大的维度的元素数 4.cd 转换路径 5.load 载入文件 6.who(whos)显示存储的变量 7.文件名(%d,%d)读出第?-?个元素 8.存储文件:把名字和数据存进一个文件里面 save 文件名 变量名 -ascii 9,访问元素 A(%d,%d) :表示访问每一个元素 A(2,:) A(:,2)或者A([1,3],:),可以访问,也可以存东西进 10.[A,[……]]新的列向量[A B],[A;B] 11.A(:)生成一个列向量

5.3 计算

1.A*B矩阵乘法 2.A.*B点积 A./B 1./A 都是可以的 exp(v) log(b) 3.A' 转置 4.max()求最大值,还可以求出矩阵之间的最大值 5,find()寻找满足条件的值,把结果存进一个矩阵里面(行列) 6,sum(),可以加参数,求出每个维度数据的和 7.prod() 8.floor()向下求整 9.celi()向上求整 10.max(A,[],%d)求每一列(行)的最大值 11.flipub(A)翻转 12.pinv(A)求逆矩阵

5.4 画图

1.plot(x,y)画图(其中x和y是维度相同的向量),可以加参数来规定颜色 2.xlabel(‘’)标记x的标签 3.print 输出图像文件 4.figure(x):给图像标号 5.subplot(1,2,1)分成几乘几的网格,我这个图用那个网格 6.imagesc(A),colorbar,colormap gray

image-20201018232035011

5.5 流程控制

1.indices: %d:%d 从几到几的连续数列 可以使用for i=indices 最后用end结束即可 2.while语句:while 跟循环条件, end结束 3.if 判断条件 end 结束 4.函数:image-20201018233933554

注意函数保存的文件和当前文件路径 addpath(‘文件路径’)来添加搜索路径

image-20201018234155199

可以返回多值

image-20201018234524407

5.6 线性代数

1.Octave&Matlab 向量从1开始

image-20201018235849627

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

  • 垃圾邮件判断
  • 金融欺诈判断
  • 肿瘤诊断

讨论肿瘤诊断问题:

img

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果 。

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为全体实数集(),则当线性回归函数给出诸如等很大/很小(负数)的数值时,结果,这显得非常怪异。

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 , 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型

逻辑回归模型中,的作用是,根据输入x以及参数,计算得出”输出“的可能性(estimated probability),概率学中表示为:

image-20201022223745146

以肿瘤诊断为例, 表示病人有的概率得了恶性肿瘤。

image-20201022231618131

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以为阈值: 就是看的取值

image-20201022224035620

回忆一下 sigmoid 函数的图像:

sigmoid function

同线性回归模型的不同点在于: image-20201022224051571

直观一点来个例子, 是下图模型的假设函数:

img

根据上面的讨论,要进行分类,那么只要时,就预测,即预测为正向类。

如果取image-20201022224150702,则有,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出的分类预测结果。

决策边界是假设函数的一个性质

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 image-20201022224559839,决策边界对应了一个在原点处的单位圆,如此便可给出分类结果,如图中品红色曲线:

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的)决定啦。

image-20201022233355466

image-20201022234014832

6.4 代价函数(Cost Function)

那我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个 。

如果直接套用线性回归的代价函数:

其中 ,可绘制关于的图像,如下图

img

回忆线性回归中的平方损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样将使得梯度下降算法无法确定收敛点是全局最优。

img

如果此处的损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为凸优化问题(Convex optimization)

当然,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法推出代价函数 :

image-20201022231030534

则有关于的图像如下:

img

如左图,当训练集的结果为 1(正样本)时,随着假设函数趋向于 ,代价函数的值会趋于 0,即意味着拟合程度很好。如果假设函数此时趋于0 ,则会给出一个很高的代价,拟合程度,算法会根据其迅速纠正值,右图0同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

请注意向量化的实现!!! 本质上的计算和前面的线性回归是一样的,不同的是:的表达

image-20201025214720130

image-20201025214742965

image-20201025214935921

image-20201025214948744

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化代价函数并得出的最优值,在使用梯度下降算法时,如果不需要观察代价函数的收敛情况,则直接计算的导数项即可,而不需要计算值。

我们编写代码给出代价函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化代价函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

  • 梯度下降法(Gradient Descent)

  • 共轭梯度算法(Conjugate gradient)

  • 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)

    • DFP算法
    • 局部优化法(BFGS)
    • 有限内存局部优化法(L-BFGS)
  • 拉格朗日乘数法(Lagrange multiplier)

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

image-20201025234042760image-20201025234058239

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。

img

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出(属于第个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为,现在 就是一个维向量。

对于某个样本实例,需计算所有的种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

image-20201026210810786

image-20201026210849016

image-20201026210910481

7 正则化(Regularization)

7.1 过拟合问题(The Problem of Overfitting)

对于拟合的表现,可以分为三类情况:

  • 欠拟合(Underfitting)

    无法很好的拟合训练集中的数据,预测值和实际值的误差很大,这类情况被称为欠拟合。拟合模型比较简单(特征选少了)时易出现这类情况。类似于,你上课不好好听,啥都不会,下课也差不多啥都不会。

  • 优良的拟合(Just right)

    不论是训练集数据还是不在训练集中的预测数据,都能给出较为正确的结果。类似于,学霸学神!

  • 过拟合(Overfitting)

    能很好甚至完美拟合训练集中的数据,即 ,但是对于不在训练集中的新数据,预测值和实际值的误差会很大,泛化能力弱,这类情况被称为过拟合。拟合模型过于复杂(特征选多了)时易出现这类情况。类似于,你上课跟着老师做题都会都听懂了,下课遇到新题就懵了不会拓展。

线性模型中的拟合情况(左图欠拟合,右图过拟合):img

逻辑分类模型中的拟合情况:img

为了度量拟合表现,引入:

  • 偏差(bias)

    指模型的预测值与真实值的偏离程度。偏差越大,预测值偏离真实值越厉害。偏差低意味着能较好地反应训练集中的数据情况。

  • 方差(Variance)

    指模型预测值的离散程度或者变化范围。方差越大,数据的分布越分散,函数波动越大,泛化能力越差。方差低意味着拟合曲线的稳定性高,波动小。

据此,我们有对同一数据的各类拟合情况如下图:img

据上图,高偏差意味着欠拟合,高方差意味着过拟合。

我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。

避免过拟合的方法有:

  • 减少特征的数量

    • 手动选取需保留的特征
    • 使用模型选择算法来选取合适的特征(如 PCA 算法)
    • 减少特征的方式易丢失有用的特征信息
  • 正则化(Regularization)

    • 可保留所有参数(许多有用的特征都能轻微影响结果)

    • 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响程度

    • 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好

      image-20201026201852935

7.2 代价函数(Cost Function)

很多时候由于特征数量过多,过拟合时我们很难选出要保留的特征,这时候应用正则化方法则是很好的选择。

上文中, 这样一个复杂的多项式较易过拟合,在不减少特征的情况下,如果能消除类似于等复杂部分,那复杂函数就变得简单了

为了保留各个参数的信息,不修改假设函数,改而修改代价函数:

image-20201026202742375

上式中,我们在代价函数中增加了 、 的惩罚项(penalty term) ,如果要最小化代价函数,那么势必需要极大地减小 、,从而使得假设函数中的 、 这两项的参数非常小,就相当于没有了,假设函数也就*“变得”简单*了,从而在保留各参数的情况下避免了过拟合问题。

img

根据上面的讨论,有时也无法决定要减少哪个参数,故统一惩罚除了外的所有参数。

代价函数:

image-20201026203018802

: 正则化参数(Regularization Parameter),

: 不惩罚基础参数

紫色: 正则化项

正则化参数类似于学习速率,也需要我们自行对其选择一个合适的值。

  • 过大

    • 导致模型欠拟合(假设可能会变成近乎的直线 )
    • 无法正常去过拟问题
    • 梯度下降可能无法收敛
  • 过小

    • 无法避免过拟合(等于没有)

正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

正则化是结构风险最小化策略的实现,是去过拟合问题的典型方法,虽然看起来多了个一参数多了一重麻烦,后文会介绍自动选取正则化参数的方法。模型越复杂,正则化参数值就越大。比如,正则化项可以是模型参数向量的范数。

image-20201026203452941

7.3 线性回归正则化(Regularized Linear Regression)

应用正则化的线性回归梯度下降算法:

应用正则化的正规方程法:

image-20201026203914337

不可逆的问题:

(不可逆),但是如果不是的话,这个矩阵一定是不可逆的

7.4 逻辑回归正则化(Regularized Logistic Regression)

为逻辑回归的代价函数添加正则化项:

image-20201026205146066

注意是从1开始哦

前文已经证明过逻辑回归和线性回归的代价函数的求导结果是一样的,此处通过给正则化项添加常数 ,则其求导结果也就一样了。

从而有应用正则化的逻辑回归梯度下降算法:

image-20201026205359968

image-20201026205443217

Quiz

You are training a classification model with logistic regression. Which of the following statements are true? Check

  • Introducing regularization to the model always results in equal or better performance on the training set.
  • Adding many new features to the model helps prevent overfitting ont the training set.
  • Introducing regularization to the model always results in equal or better performance on examples not in the training set.
  • Adding a new feature to the model always results in equal or better performance on the training set. * 选项1: 将正则化方法加入模型并不是每次都能取得好的效果,如果λ取得太大的化就会导致欠拟合. 这样不论对traing set 还是 examples都不好. 不正确 * 选项2: more features能够更好的fit 训练集,同时也容易导致overfit,是more likely而不是prevent. 不正确 * 选项3: 同1,将正则化方法加入模型并不是每次都能取得好的效果,如果λ取得太大的化就会导致欠拟合. 这样不论对traing set 还是 examples都不好. 不正确 * 选项4: 新加的feature会提高train set的拟合度,而不是example拟合度. 正确

Which of the following statements about regularization are true? Check all that apply.

  • Using too large a value of λ can cause your hypothesis to overfit the data; this can be avoided by reducing λ.
  • Using a very large value of λ cannot hurt the performance of your hypothesis; the only reason we do not set λ to be too large is to avoid numerical problems.
  • Consider a classification problem. Adding regularization may cause your classifier to incorrectly classify some training examples (which it had correctly classified when not using regularization, i.e. when λ=0).
  • Because logistic regression outputs values 0≤hθ(x)≤1, its range of output values can only be “shrunk” slightly by regularization anyway, so regularization is generally not helpful for it. ** 答案: 3 ** 正则化方法的公式: J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑i=1nθ2j]

* 选项1: λ太大导致overfit不对,是underfit,当λ太大时θ1θ2...θn≈0.只有θ0起作用,拟合出来是一条直线. λ太小才会导致overfit. 不正确 * 选项2: 同1. 不正确 * 选项3: 当λ没有选择好时,可能会导致训练效果还不如不加的λ好. 正确 * 选项4: “shrunk” slightly的是θ, regularization是想要解决overfit. 不正确

 

8 神经网络:表达(Neural Networks: Representation)

8.1 非线性假设(Non-linear Hypotheses)

理论上我们可以用多项式函数去近似任意函数(泰勒极数(Taylor series)),从而可得到任意问题的拟合曲线。

在实际处理时,特征量通常会很多,如果再构造高阶多项式等,特征数量将会急剧增加,这使得回归模型的复杂度太高,可见并不合适。神经网络无需构造高阶多项式,在特征量很大时也可以处理的很好。

那特征能有多大呢?下面是一个计算机视觉中的例子:

img

如上图,如果选取一小块50*50像素的灰度图片(一个像素只有亮度一个值),选择每个像素点作为特征,则特征总量2500(换成 RGB(一个像素有三个值),则n=7500),如果将其两两组合作为新特征,则特征数量将为3millon。

8.2 神经网络和大脑(Neurons and the Brain)

脑科学家通过对动物实验,发现大脑中专用于处理听觉信号的脑皮层也能处理其他诸如视觉等信号,即如果切断其与耳朵的联系,将其与眼睛相连,则这块负责听觉的脑皮层区域也能接受并处理视觉信号,从而学会“看”。脑科学家通过这类换源实验,就推论假设大脑的学习算法只有一种(“one learning algorithm” hypothesis)。那么如果能找出这种学习算法并应用于计算机中,那梦想中和人一样的人工智能就成真了。

神经网络就源于模拟人类大脑,但其需要的计算量很大。随着计算机硬件性能的提高,神经网络逐渐从衰落变为流行,如今已广泛地被应用在各行各业中。

下图是根据研究做的一些应用(有兴趣可回顾视频):

img

BrainPort 系统:帮助失明人士通过摄像头以及舌尖感官“看”东西

img

触觉皮带:在朝北时蜂鸣器会发出声响,可使人拥有方向感(声音信号转换为方向信号)。

8.3 模型表示1(Model Representation I)

既然神经网络模仿的是大脑神经元,那就先看一下大脑的神经元长什么样吧:

来源: http://blog.csdn.net/zzwu/article/details/574931

想象一下印刷厂中流水线的工人(机器人也算哦),每个工人都有特定的任务,比如装订,塑封,贴防伪标识等等,工人们看到书本并处理完自己的任务后,就回放回传送带,紧接着传送带就传给下一个环节的工人,如此不断重复从而完成一个又一个环节,直到一本书印制完成。

那么类比一下,把上图中的细胞核(nucleus)类比成工人,轴突(axon)类比传送带,树突(dendrite)则比类比成工人的双眼。一个又一个细胞体,从树突接收需要处理的信息,对其进行处理后,再经由轴突通过电信号把处理完的信息传递出去,直到理解信息的内容。当然啦,我们大脑的实际上还要更为复杂,而且一个人的神经元数目就比地球上所有流水线的工人之和还要多呢~

人工神经网络中,树突对应输入(input),细胞核对应激活单元(activation unit),轴突对应输出(output)

我们一般把神经网络划分为三部分(注意,不是只有三层!),即输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。

img

图中的一个圈表示神经网络中的一个激活单元,输入层对应输入单元,隐藏层对应中间单元,输出层则对应输出单元。中间激活单元应用激活函数处理数据。

下面列出一些已有概念在神经网络中的别称:

  • : 偏置单元(bias unit),=1
  • : 权重(weight),即参数。
  • 激活函数: ,即逻辑函数等。
  • 输入层: 对应于训练集中的特征
  • 输出层: 对应于训练集中的结果

: 第i层的第 个激活单元

: 从第 层映射到第 层时的权重矩阵。

: 从第 层的第 个单元映射到第 层的第 个单元的权重

: 第j层的激活单元数目(不包含偏置单元)

注意:

  • 符号较多,记不住可随时回顾!
  • 每个单元会作用于下一层的所有单元(矩阵乘法运算)。
  • 如果第j层有个单元,第j+1层有个单元,是一个维的权重矩阵。即每一层的权重矩阵大小都是非固定的。
  • 其中, +1来自于偏置单元,这样意味着输出层不包含偏置单元,输入层和隐藏层需要增加偏置单元。

依据本节所给模型,有:

image-20201028232007874

8.4 模型表示2(Model Representation II)

img

对输入层(Layer 1)的所有激活单元应用激活函数,从而得到隐藏层(Layer 2)中激活单元的值:

image-20201028231806736

对 Layer 2 中的所有激活单元应用激活函数,从而得到输出:

image-20201028231815691

上面的计算过程被称为前向传播(Forward propagation),即从输入层开始,一层一层地向下计算并传递结果。

再回顾一下逻辑回归:

image-20201028231824768

是不是除了符号表示,其他都完全一样?其实神经网络就好似回归模型,只不过输入变成了中间单元。从输入 开始,下一层的每个激活单元都包含了上一层的所有信息(单元值),通过最优化算法不断迭代计算,激活单元能得出关于输入 的更多信息,这就好像是在给假设函数加多项式。隐藏层的这些单元好似升级版的初始特征,从而能给出更好的预测。

向量化实现

image-20201028231929069

: 训练集中的样本实例数量

: 第二层神经网络中激活单元的数量

当然,神经网络可有多层,每层的激活单元数量也并不固定:

img

我们习惯于将输入层称为神经网络的第 0 层,如上图的神经网络被称为三层网络。

8.5 例子和直观理解1(Examples and Intuitions I)

为了更好的理解神经网络,举例单层神经网络进行逻辑运算的例子。

下面的例子中, 为二进制数。

逻辑与(AND)运算(都为真值则结果才为真)神经网络:

img

image-20201028233712979

回顾 sigmoid 函数图像,根据输入则有上图中右边的表格,即 。这样就实现了一个能够进行与运算的神经网络。

sigmoid function

再举一例,逻辑或(OR)运算(有一个真值则结果就为真)神经网络:

img

8.6 例子和直观理解2(Examples and Intuitions II)

下面逐步构建复杂一点的神经网络

img

如上图,我们分别构建了三个单层神经网络,将这三个网络组合起来,可得到一个新的神经网络,其可完成逻辑运算中的异或(XNOR)操作:

img

这里的组合即为 image-20201028233653965

image-20201028233701775

可见,特征值能不断升级,并抽取出更多信息,直到计算出结果。而如此不断组合,我们就可以逐渐构造出越来越复杂、强大的神经网络,比如用于手写识别的神经网络。

8.7 多类别分类(Multiclass Classification)

之前讨论的都是预测结果为单值情况下的神经网络,要实现多类别分类,其实只要修改一下输出层,让输出层包含多个输出单元即可。

举一个 4 分类问题的实例:

img

有四种分类情况,那么就让输出层包含 4 个输出单元即可,则 为 4 维向量。

神经网络中的多分类算法算是对 one-vs-all 思想的扩展,定义预测结果一共有 4 种情况:

img

image-20201028233635799

总结一下

多分类问题,要分为 类,就在输出层放置 个输出单元,对于单个样本实例,预测向量 为 维向量,我们则依据这个预测向量,得出该实例属于哪个类 。注意,神经网络中的预测和结果都是维向量,而不再只是一个实数了。

9 神经网络: 学习(Neural Networks: Learning)

9.1 代价函数(Cost Function)

神经网络的分类问题有两种:

  • 二元分类问题(0/1分类)

    只有一个输出单元 ()

  • 多元()分类问题

    输出单元不止一个()

神经网络的代价函数公式:

image-20201028234716639

 

: 神经网络的总层数

: 第层激活单元的数量(不包含偏置单元)

: 分为第个分类()的概率 ()

: 输出层的输出单元数量,即类数 - 1

: 第个训练样本的第个分量值

:维向量

 

注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以做下统一.

公式可长可长了是吧,但是不是有些熟悉?对照下逻辑回归中的代价函数:

image-20201028234957070

在神经网络的代价函数中,

image-20201028235012971

image-20201028235028777

再次可见,神经网络背后的思想是和逻辑回归一样的,但由于计算复杂,实际上神经网络的代价函数是一个非凸(non-convex)函数。

对每个样本特征运行K次,求和,正则化的式子就是对于激活的单元的(不包括偏置单元1)

可以用点积表示

9.2 反向传播算法(Backpropagation Algorithm)

image-20201111234430543

类似于回归模型中的梯度下降算法,为了求解神经网络最优化问题,我们也要计算

在神经网络中,代价函数看上去虽然不复杂,但要注意到其中 的求取实际上是由前向传播算法求得,即需从输入层开始,根据每层间的权重矩阵 依次计算激活单元的值 。 在最优化代价函数时,我们必然也需要最优化每一层的权重矩阵,再次强调一下,算法最优化的是权重,而不是输入

image-20201111235035557

img

反向传播算法用于计算每一层权重矩阵的偏导 ,算法实际上是对代价函数求导的拆解。

  1. 对于给定训练集 ,初始化每层间的误差和矩阵,即令所有的,使得每个为一个全零矩阵。

  2. 接下来遍历所有样本实例,对于每一个样本实例,有下列步骤:

    1. 运行前向传播算法,得到初始预测

    2. 运行反向传播算法,从输出层开始计算每一层预测的误差(error),以此来求取偏导。

      img

      输出层的误差即为预测与训练集结果的之间的差值:,

      对于隐藏层中每一层的误差,都通过上一层的误差来计算:

image-20201028235228837

image-20201028235244166

image-20201028235256188

image-20201111235258674

9.3 直观理解反向传播(Backpropagation Intuition)

image-20201028235351321

视频内容实际在上文都涉及到了,上节也做了解释:

反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

不过,这块还是有些不好理解,可回顾视频。

前文提到输入层没有偏差,所以没有,同样的,偏置单元的值始终为 1,也没有误差,故一般会选择忽略偏置单元项的误差

image-20201028235515240img

image-20201028235541217

image-20201028235638151

image-20201028235659493

image-20201028235715935

9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)

在 Octave/Matlab 中,如果要使用类似于 fminunc 等高级最优化函数,其函数参数、函数返回值等都为且只为向量,而由于神经网络中的权重是多维矩阵,所以需要用到参数展开这个技巧。

说白了,这个技巧就是把多个矩阵转换为一个长长的向量,便于传入函数,之后再根据矩阵维度,转回矩阵即可。

Octave/Matlab 代码:

image-20201115185944967

reshape(A,m,n): 将向量 A 重构为 m * n 维矩阵。

9.5 梯度检验(Gradient Checking)

由于神经网络模型中的反向传播算法较为复杂,在小细节非常容易出错,从而无法得到最优解,故引入梯度检验。

梯度检验采用数值估算(Numerical estimation)梯度的方法,被用于验证反向传播算法的正确性。

img

image-20201115190042901

Octave/Matlab 代码:

在得出 gradApprox 梯度向量后,将其同之前计算的偏导 比较,如果相等或很接近,即说明算法没有问题。

在确认算法没有问题后(一般只需运行一次),由于数值估计的梯度检验效率很低,所以一定要禁用它

9.6 随机初始化(Random Initialization)

逻辑回归中,初始参数向量全为 0 没什么问题,在神经网络中,情况就不一样了。

初始权重如果全为 0, ,则隐藏层除了偏置单元,都为 0,而每个单元求导的值也都一样,这就相当于是在不断重复计算同一结果,也就是算着算着,一堆特征在每一层都变成只有一个特征(虽然有很多单元,但值都相等),这样,神经网络的性能和效果都会大打折扣,故需要随机初始化初始权重。

随机初始化权重矩阵也为实现细节之一,用于打破对称性(Symmetry Breaking),使得

Octave/Matlab 代码:

当然,初始权重的波动也不能太大,一般限定在范围内,即

rand(m,n): 返回一个在区间 (0,1) 内均匀分布的随机矩阵。

: 和梯度下降中的没有联系,这里只是一个任意实数,给定了权重矩阵初始化值的范围。

9.7 综合起来(Putting It Together)

一般来说,应用神经网络有如下步骤:

  1. 神经网络的建模(后续补充)

    • 选取特征,确定特征向量的维度,即输入单元的数量。
    • 鉴别分类,确定预测向量的维度,即输出单元的数量。
    • 确定隐藏层有几层以及每层隐藏层有多少个隐藏单元。

    默认情况下,隐藏层至少要有一层,也可以有多层,层数越多一般意味着效果越好,计算量越大。

  2. 训练神经网络

    1. 随机初始化初始权重矩阵

    2. 应用前向传播算法计算初始预测

    3. 计算代价函数的值

    4. 应用后向传播宣发计算代价函数的偏导数

    5. 使用梯度检验检查算法的正确性,别忘了用完就禁用它

    6. 丢给最优化函数最小化代价函数

      由于神经网络的代价函数非凸,最优化时不一定会收敛在全局最小值处,高级最优化函数能确保收敛在某个局部最小值处。

第 1 题

You are training a three layer neural network and would like to use backpropagation to compute the gradient of the cost function. In the backpropagation algorithm, one of the steps is to update Δ(2)ij:=Δ(2)ij+δ(3)i∗(a(2))j for every i,j. Which of the following is a correct vectorization of this step?

  • Δ(2):=Δ(2)+(a(2))T∗δ(3)

  • Δ(2):=Δ(2)+(a(3))T∗δ(2)

  • Δ(2):=Δ(2)+δ(3)∗(a(2))T

  • Δ(2):=Δ(2)+δ(3)∗(a(3))T

    ** 答案: 3 ** ** **


    第 2 题

    Suppose 𝚃𝚑𝚎𝚝𝚊𝟷 is a 5x3 matrix, and 𝚃𝚑𝚎𝚝𝚊𝟸 is a 4x6 matrix. You set 𝚝𝚑𝚎𝚝𝚊𝚅𝚎𝚌=[𝚃𝚑𝚎𝚝𝚊𝟷(:);𝚃𝚑𝚎𝚝𝚊𝟸(:)] . Which of the following correctly recovers 𝚃𝚑𝚎𝚝𝚊𝟸?

    • 𝚛𝚎𝚜𝚑𝚊𝚙𝚎(𝚝𝚑𝚎𝚝𝚊𝚅𝚎𝚌(𝟷𝟼:𝟹𝟿),𝟺,𝟼)
    • 𝚛𝚎𝚜𝚑𝚊𝚙𝚎(𝚝𝚑𝚎𝚝𝚊𝚅𝚎𝚌(𝟷𝟻:𝟹𝟾),𝟺,𝟼)
    • 𝚛𝚎𝚜𝚑𝚊𝚙𝚎(𝚝𝚑𝚎𝚝𝚊𝚅𝚎𝚌(𝟷𝟼:𝟸𝟺),𝟺,𝟼)
    • 𝚛𝚎𝚜𝚑𝚊𝚙𝚎(𝚝𝚑𝚎𝚝𝚊𝚅𝚎𝚌(𝟷𝟻:𝟹𝟿),𝟺,𝟼)
    • 𝚛𝚎𝚜𝚑𝚊𝚙𝚎(𝚝𝚑𝚎𝚝𝚊𝚅𝚎𝚌(𝟷𝟼:𝟹𝟿),𝟼,𝟺)

    第 3 题

    Let J(θ)=2θ3+2. Let θ=1, and ϵ=0.01. Use the formula J(θ+ϵ)−J(θ−ϵ)2ϵ to numerically compute an approximation to the derivative at θ=1. What value do you get? (When θ=1, the true/exact derivati ve is dJ(θ)dθ=6.)

    • 8
    • 6
    • 5.9998
    • 6.0002

    ** 答案: 4 ** ** J(θ+ϵ)−J(θ−ϵ)2ϵ=2∗(θ+ϵ)3+2−(2∗(θ−ϵ)3+2)2ϵ ** ** 将ϵ=0.01, θ=1 代入上式,并化简一下可得出 ** ** (θ+ϵ)3−(θ−ϵ)3ϵ=(1+0.01)3−(1−0.01)30.01=6.0002 **


    第 4 题

    Which of the following statements are true? Check all that apply.

    • Using a large value of λ cannot hurt the performance of your neural network; the only reason we do not set λ to be too large is to avoid numerical problems.
    • Gradient checking is useful if we are using gradient descent as our optimization algorithm. However, it serves little purpose if we are using one of the advanced optimization methods (such as in fminunc).
    • Using gradient checking can help verify if one’s implementation of backpropagation is bug-free.
    • If our neural network overfits the training set, one reasonable step to take is to increase the regularization parameter λ.

    ** 答案: 3 4 ** * 选项1: 以前的quiz中遇到过,当选的λ太大时,会成为一条直线,underfit. 不正确 * 选项2: Gradient checking是验检神经网络内部的计算结果对不对,不关心是用的哪个算法,高级算法如fminuc与原始的sigmoid梯度下降都可以用gradient checking来验检. 不正确 * 选项3: Gradient checking就是用来验检神经网络内部的计算结果对不对的. 正确 * 选项4: 回忆一下当时引入正规化项Regularization的目的是什么? 是为了解决overfitting的问题. 假设设置的λ太小了就相当于没有加入正规化项,penalize不够,还是会overfit,则需要加大λ; 再补充另一方面,如果把λ设置的太大了,就会成为一条直线,导致出现underfit. neural network 与 lr 是一样的. 正确


    第 5 题

    Which of the following statements are true? Check all that apply.

    • Suppose that the parameter Θ(1) is a square matrix (meaning the number of rows equals the number of columns). If we replace Θ(1) with its transpose (Θ(1))T, then we have not changed the function that the network is computing.
    • Suppose we have a correct implementation of backpropagation, and are training a neural network using gradient descent. Suppose we plot J(Θ) as a function of the number of iterations, and find that it is increasing rather than decreasing. One possible cause of this is that the learning rate α is too large.
    • Suppose we are using gradient descent with learning rate α. For logistic regression and linear regression, J(Θ) was a convex optimization problem and thus we did not want to choose a learning rate αthat is too large. For a neural network however, J(Θ) may not be convex, and thus choosing a very large value of α can only speed up convergence.
    • If we are training a neural network using gradient descent, one reasonable “debugging” step to make sure it is working is to plot J(Θ) as a function of the number of iterations, and make sure it is decreasing (or at least non-increasing) after each iteration.

    ** 答案: 2 4 ** * 选项1: 神经网络的计算(network computing).以第2层为例: a(2)=g(z(2))=g(Θ(1)∗a(1)), 当Θ(1)转置为(Θ(1))T时,显然 g(Θ(1)∗a(1))≠g((Θ(1))T∗a(1)) . 不正确 * 选项2: 当选的α太大时,gradient descent有可能越过最低点,导致CostFunction的值越来越大. 正确 * 选项3: 没有确定神经网络的J(Θ)是不是一定是凸的(等大神指导),但是就算不是凸的也不一定非得设置一个很大的α. 不正确 * 选项4: 将CostFunction的值每次都打印出来,看有没有减小来确定我们的训练是不是有效,感觉这个选项是完全正确的废话. 正确

最后修改日期:2020年11月15日