目录
前言
本文主要记录在听李宏毅老师的课时对应做的课堂笔记
课程:
课程预览
机器学习=找函数 (找一个人类写不出来的复杂函数) 课程侧重深度学习(类神经网络的整个类型)
输入:各种各样 eg:vector、Matrix、Sequence
输出:各种各样 eg:scalar、classification(类别)、image、text
教机器的种种方法:
1、Supervised Learning (监督学习) 【lecture 1-5】
- eg:让机器学会给他一张图片,判断是宝可梦还是数码宝贝
- 做法:收集一大堆的训练资料 比如抓很多动物,然后标记它是宝可梦还是数码宝贝 标注就称为label 标注好后叫机器自动找出一个方向,这个方向的输入是动物,输出告诉是宝可梦还是数码宝贝
- 存在问题:标记是一个非常耗费人工的事情,可能收集到的标记资料不会太多,而且如果要为每一个任务收集足够的标准资料,非常麻烦所以引入了self-supervised Learning
2、Self-supervised Learning (无监督学习) 【lecture 7】
- Pre_train:Develop general purpose knowledge (预训练:在训练之前先练成一些基本功) 又叫做Foundation Model
- eg:让机器学会做各种不同影响辨识相关任务的基本功,把基本功练好以后可以在新的任务上做得更好 练基本功时,不需要任何标准,只需要发一大堆影像资料,机器就会自动学会我们要它学习的基本能力 最知名的模型:BERT 还有GPT-3 GPT-2 T5等模型
- Downstream Tasks (下游任务:真正要机器学会的任务) 在进行基本功能的预训练以后机器就可以在我们真正关心的下游任务上面得到好的结果
- Pre-trained Model和Downstream Tasks的关系类似作业系统和应用之间的关系,就像现在开发一个软件简单很多,因为核心和最难得部分已经被作业系统实现了(如Android studio等)
3、Generative Adversarial Network (生成对抗网络) 【lecture 6】
- x->function->y 只需要收集大量的x和收集到大量的y,不需要他们之间成对的关系,机器就有自动把它们之间的关联找出来
- eg:语音识别
监督学习:要收集大家的声音讯号,然后这些声音讯号需要标注出对应的文字,就可以让机器学会怎么把一段声音转成一段文字
GAN:可以使机器只听大量的声音讯号,接下来读大量的文字,文字不需要使同样的来源,不需要讲它的内容,机器也有办法自动学会做语音辨别这件事情
4、Reinforcement Learning (强化学习) 【lecture 12】
用途:不知道要怎么标注资料的时候,比如想要叫机器学会下围棋,看到棋盘知道下一手下到哪里,但人类可能也不知道下一手下在哪里,此时就可以利用RL技术(即不知道怎么标注资料,但能判断好坏,能定义什么叫成功的情况)
除了追求正确率以外,还要关注其他事情
5、Anomaly Detection (异常检测) 【lecture 8】
假设真的训练成功一个宝可梦跟数码宝贝的分类器,如果提供的图片是恐龙,那机器回答什么?即异常检测就是让机器能够具备回答我不知道的能力
6、Explainable AI (可解释性AI) 【lecture 9】
假设真的训练成功一个宝可梦跟数码宝贝的分类器,真的代表它聪明吗?真的代表它知道宝可梦长什么样子吗?未必。我们要让它不只是回答正确的答案,同时还要告诉我们为什么它知道答案应该是这样
7、Model Attack (模型的攻击) 【lecture 10】
尽管如今影像辨别系统很厉害,对图片添加杂讯,机器识别失败,这就是人类对模型的攻击
8、Domain Adaptation (领域自适应) 【lecture 11】
在进行机器学习时往往假设训练资料和测试资料它们的分布是类似的,这样测试的正确率会非常高,但假如训练资料是黑白的,测试资料是彩色的,此时的正确率就会大大下降,这是要解决的问题
9、NetWork Compression (模型压缩) 【lecture 13】
将很大的模型进行压缩,使得其能够在手机/智能手表等上面跑
10、Life-long Learning (终身学习) 【lecture 14】
11、Meta learning (元学习) 【lecture 15】
前14讲都是人去设计了一个学习的演算法,让机器具备分类的能力。这一讲讲机器从大量的任务里面自己发明新的演算法,机器不再使用人发明的算法,而是从过去的学习经验里面发明出新的演算法
Few-shot learning is usually achieved by meta-learning (用非常少量的资料就进行学习)
第一讲
机器学习基本概念
用一句话概括机器学习:让机器具备找一个函数的能力
一、函数的不同种类
1、Regression:The function outputs a scalar. (回归:函数输出标量。)
eg: 预测PM2.5 输入为今天的PM2.5数据、今天的温度、臭氧浓度等,通过函数f,输出明天的PM2.5值 这一个函数的任务就是Regression
2、Classification:Give options(classes),the function outputs the correct one (分类:给出选项(类),函数输出正确的选项)
eg: 邮箱里面收到很多邮件,判断其是否为垃圾邮件 输入是一封电子邮件,通过f,输出实现规定好的选项中符合的一个
阿尔法狗也是一样,输入是棋盘上黑子和白子的位置,通过f,输出从19X19的选项选出一个正确的选项
3、Structured Learning:Create something with structure(image,document)
让机器不只是做选择和输出数字,而是要产生一个有结构的物件(图片、文件等),即让机器学会创造这件事情
二、机器怎么找一个函数呢?
例子:假设需要根据自己的youtube频道的前一天的阅读点击率去预测明天有可能的点阅的次数,怎么找这个函数呢?
机器学习找这个函数的过程可以分为三个步骤
1、Function with Unknown Parameters (参数未知的函数)
- y = f(youtube数据) 猜测数学式长什么样?输入跟y有什么关系呢? []里面为名称,一些名词的定义
- Model: y = b + wx₁ (base on domain knowledge) (带有Unknown parameters的Function成为Model)
- y:no.of views on 2/26(今天的观看人数 未知) x₁:no.of views on 2/25(前一天观看人数)[feature]
- w[weight] and b[bias] are unknown parameters(learned from data)
2、Define Loss from Training Data (从训练数据中定义损失)
- Loss is a function of parameters L(b,w) Loss:how good a set of values is
输入是Model里面的参数b,w 输出是当把一组未知的参数设定某一个数值时,这个数值好还是不好
- eg:L(0.5k,1) y = 0.5k + 1x₁ How good it is?
训练资料是这个频道过去的点击次数,把点阅次数代入函数,比对计算结果和真实结果,计算差距,得到e₁=|y-y^|
label指的就是正确的数值y^(真实值) 计算过去每一天的点阅次数,都可以得到一个差距e然后把每一天的差距加起来然后取得平均 Loss: L = 1/N∑e L越大代表这一组参数越不好,L越小代表这一组参数越好
计算差距的方法可以有多种 得到的L可能有正有负
如所取的e = |y-y^| 所得到的L is mean absolute error(MAE)
e = (y-y^)₂ 所得到的L is mean square error(MSE)
如果y和y^都是几率分布的话可以选择Cross-entropy
通过给参数设置不同的数值,得到对应的Loss 并将其绘制成等高线图,该等高线图称为Error Surface
3、Optimization (最佳化)
可以让L最小的w,b组合记为w*,b*
- 方法:Gradient Descent
①(Randomly)Pick an initial value wº
先假设未知的参数只有一个w,当w代表不同数值的时候就会得到不同的Loss,怎么样找到一个w去让这个loss的值最小呢?随机选取一个初始的点wº
② compute ∂L/∂w
计算w等于wº的时候,w这个参数对loss的微分是多少,结果是负数,说明左边比较高右边比较低,那么就把w的值变大从而使得L变小
如果算出来是整数,说明左边比较低右边比较高,那么就把w的值变小,可以使得L变小
【变大变小的步伐取决于两件事——①微分(斜率)有多大,斜率越大不步伐越大 ②η:learning rate (学习速率 自己设定的 速率越大,每次参数就会update很大 学习可能就比较快) 在机器学习中需要自己设定的东西叫做hyperparameters 第一步中的未知参数是机器自己找出来的】
③update w iteratively
wº移动步伐后为w₁,步伐为η∂L/∂w,重复以上步骤
- 停下来的情况:①失去耐心,最多计算几次就结束 ②微分值算出来刚好是0
- 该方法存在的问题:没有真正找到最好的解,没有找到那个可以让Loss最小的w,可能只找到Local minima 而找不到global minima。真的可以让Loss最小的地方叫做global minima(最大值) 还有Local minima(极小值)。但如果真正的去训练网络,自己用这个方法,可以发现local minima是一个假问题,真正面临的问题不是local minima而是另有其它
两个参数使用Gradient Descent的步骤
对两个参数进行计算后绘制等高线图及使用Gradient Descent方法的过程如图所示:
上述三个步骤所得到的结果是一个让人满意的结果吗?也许不是。这三个步骤合起来叫做训练,是在已经知道的资料上进行计算Loss。而我们真正的目的是要去测明天未知的点阅次数。
因而接下来应该拿这个函数去预测一下未来一年的每天的可能点阅次数,然后得到平均误差,结果发现在没看过的资料上误差值比看过的资料要大
分析结果继续优化 真实结果有周期性——七天一循环,周五六观看人数少
因此我们可以修改模型,改为将前七天的资料直接复制到拿来当做进行预测的数据。甚至可以考虑更多天28天、56天。