【李宏毅深度学习】(task5)分类Classification

2023-11-01 08:10

本文主要是介绍【李宏毅深度学习】(task5)分类Classification,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习心得

(1)从optimization的角度,来说明相较於Mean Square Error,交叉熵Cross-entropy是被更常用在分类上
(2)网络设计技巧
【李宏毅深度学习】(task5)网络设计技巧1—Local Minimum和鞍点
【李宏毅深度学习】(task5)网络设计技巧2—Batch and Momentum
【李宏毅深度学习】(task5)网络设计技巧3—Adaptive Learning Rate
【李宏毅深度学习】(task5)网络设计技巧4—Batch Normalization

文章目录

  • 学习心得
    • 1.较长的教学版本
    • 2.Classification as Regression?
    • 3.Class as one-hot vector
    • 4.Classification with softmax
      • Softmax
        • 用图示化的方法时:
    • 5.分类时的损失函数loss
      • 為什麼会有Cross-entropy,这麼奇怪的式子出现呢?
      • 做一个3个Class的分类

1.较长的教学版本

接下来讲有关分类怎麼做这件事情,这边讲的是一个短的版本,因為时间有限的关係,如果你想要看长的版本的话,可以看一下过去上课的录影

过去可能是花两个小时,到三个小时的时间才讲完,分类这件事情,我们这边用一个最快的方法,直接跟你讲分类是怎麼做的

2.Classification as Regression?

分类是怎麼做的呢 我们已经讲了,Regression就是输入一个向量,然后输出一个数值,我们希望输出的数值跟某一个label,也就是我们要学习的目标,越接近越好,这门课里面,如果是正确的答案就有加Hat,Model的输出没有加Hat

image-20210320165723587

有一个可能,假设你会用Regression的话,我们其实可以把Classification,当作是Regression来看

image-20210320170048002

这个方法不一定是个好方法,这是一个比较奇妙的方法,输入一个东西以后,我们的输出仍然是一个scaler,它叫做y 然后这一个y,我们要让它跟正确答案,那个Class越接近越好,但是y是一个数字,我们怎麼让它跟Class越接近越好呢,我们必须把Class也变成数字

举例来说 Class1就是编号1,Class2就是编号2,Class3就是编号3,接下来呢 我们要做的事情,就是希望y可以跟Class的编号,越接近越好

但是这会是一个好方法吗,如果你仔细想想的话,这个方法也许在某些状况下,是会有瑕疵的

image-20210320170353342

因為如果你假设说Class one就是编号1,Class two就是编号2,Class3就是编号3,意味著说你觉得Class1跟Class2是比较像,然后Class1跟Class3 它是比较不像,像这样子的表示Class的方式,有时候可行 有时候不可行

  • 假设你的Class one two three真的有某种关係举例来说,你想要根据一个人的身高跟体重,然后预测他是几年级的小学生,一年级 二年级 还是三年级,那可能一年级真的跟二年级比较接近,一年级真的跟三年级比较没有关係

  • 但是假设你的三个Class本身,并没有什麼特定的关係的话,你说Class one是1,Class two是2 Class two是3,那就很奇怪了,因為你这样是预设说,一二有比较近的关係,一三有比较远的关係,所以怎麼办呢

3.Class as one-hot vector

当你在做分类的问题的时候,比较常见的做法是把你的Class,用 One-hot(独热) vector来表示

image-20210320170948476

如果有三个Class,我们的 label 这个ŷ,就是一个三维的向量,然后呢 如果是Class1就是 [ 1 0 0 ] \begin{bmatrix}{1} \\\ {0}\\\ {0}\end{bmatrix} 1 0 0,如果是Class2就是 [ 0 1 0 ] \begin{bmatrix} {0}\\\ {1}\\\ {0}\end{bmatrix} 0 1 0,如果是Class3就是 [ 0 0 1 ] \begin{bmatrix} {0}\\\ {0}\\\ {1}\end{bmatrix} 0 0 1,所以每一个Class,你都用一个One-hot vector来表示

而且你用One-hot vector来表示的话,就没有说Class1跟Class2比较接近,Class1跟Class3比较远这样子的问题,如果你把这个One-hot vector,用算距离的话,Class之间 两两它们的距离都是一样

如果我们今天的目标y hat是一个向量 比如说,ŷ是有三个element的向量,那我们的network,也应该要Output的维度也是三个数字才行

image-20210320185241328

到目前為止我们讲的network,其实都只Output一个数值,因為我们过去做的都是Regression的问题,所以只Output一个数字

其实从一个数值改到三个数值,它是没有什麼不同的

你可以Output一个数值,你就可以Output三个数值,所以把本来Output一个数值的方法,重复三次

image-20210320185906259
  • 把a₁ a₂ a₃,乘上三个不同的Weight 加上bias,得到y₁
  • 再把a₁ a₂ a₃乘上另外三个Weight,再加上另外一个bias得到y₂
  • 再把a₁ a₂ a₃再乘上另外一组Weight,再加上另外一个bias得到y₃

你就可以產生三组数字,所以你就可以Input一个feature的Vector,然后產生y₁ y₂ y₃,然后希望y₁ y₂ y₃,跟我们的目标越接近越好,

4.Classification with softmax

现在我们知道了Regression是怎麼做的,Input x Output y 要跟 label ŷ,越接近越好

image-20210320190545539

如果是Classification,input x可能乘上一个W,再加上b 再通过activation function,再乘上W’再加上b’ 得到y,我们现在的y它不是一个数值,它是一个向量

image-20210320190621261

但是在做Classification的时候,我们往往会把y再通过一个叫做Soft-max的function得到y’,然后我们才去计算,y’跟y hat之间的距离

為什麼要加上Soft-max呢,一个比较简单的解释(如果是在过去的课程裡面,我们会先从generative的Model开始讲起,然后一路讲到Logistic Regression)

这边有一个骗小孩的解释就是,这个ŷ 它裡面的值,都是0跟1,它是One-hot vector,所以裡面的值只有0跟1,但是y裡面有任何值

既然我们的目标只有0跟1,但是y有任何值,我们就先把它Normalize到0到1之间,这样才好跟 label 的计算相似度,这是一个比较简单的讲法

如果你真的想要知道,為什麼要用Soft-max的话,你可以参考过去的上课录影,如果你不想知道的话,你就记得这个Soft-max要做的事情,就是把本来y裡面可以放任何值,改成挪到0到1之间

Softmax

这个是Soft-max的block,输入y₁ y₂ y₃,它会產生y₁’ y₂’ y₃’

image-20210320193732150

它裡面运作的模式是这个样子的
y i ′ = e x p ( y i ) ∑ j e x p ( y i ) y_i'=\dfrac{exp(y_i)}{\sum_j exp(y_i)} yi=jexp(yi)exp(yi)
我们会先把所有的y取一个exponential,就算是负数,取exponential以后也变成正的,然后你再对它做Normalize,除掉所有y的exponential值的和,然后你就得到y’

用图示化的方法时:
image-20210320194237298

y₁取exp y₂取exp y₃取exp,把它全部加起来,得到一个Summation,接下来再把exp y₁’除掉Summation,exp y₂’除掉Summation,exp y₃’除掉Summation,就得到y₁’ y₂’ y₃’

有了这个式子以后,你就会发现

  • y₁’ y₂’ y₃’,它们都是介於0到1之间
  • y₁’ y₂’ y₃’,它们的和是1

如果举一个例子的话,本来 y₁等於3y₂等於1,y₃等於负3,取完exponential的时候呢,就变成exp3 就是20,exp1就是2.7,exp-3就是0.05,做完Normalization以后,这边就变成0.88 0.12 跟0

所以这个Soft-max它要做的事情,除了Normalized,让 y₁’ y₂’ y₃’,变成0到1之间,还有和為1以外,它还有一个附带的效果是,它会让大的值跟小的值的差距更大

本来-3 然后通过exponential,再做Normalized以后,会变成趋近於0的值,然后这个Soft-max的输入,往往就叫它logit

这边考虑了3个class的状况,那如果两个class会是怎麼样

如果是两个class你当然可以直接套soft-max这个function没有问题,但是也许你更常听到的是,当有两个class的时候,我们就不套soft-max,我们直接取sigmoid

当两个class用sigmoid,跟soft-max两个class,你如果推一下的话,会发现说这两件事情是等价的

5.分类时的损失函数loss

image-20210320195929935

我们把x,丢到一个Network裡面產生y以后,我们会通过soft-max得到y’,再去计算y’跟ŷ之间的距离,这个写作е

计算y’跟ŷ之间的距离不只一种做法,举例来说,如果这个距离是Mean Square Error
e = ∑ i ( y i ^ − y i ′ ) 2 e=\sum_i(\hat{y_i}-y_i')^2 e=i(yi^yi)2就是把ŷ裡面每一个element拿出来,然后计算它们的平方和,当作我们的error,这样也是计算两个向量之间的距离,你也可以说,你也可以做到说当minimize,Mean Square Error的时候,我们可以让ŷ等於y’

但是有另外一个更常用的做法,叫做Cross-entropy
e = − ∑ i y i ^ ln ⁡ y i ′ e=-\sum_i\hat{y_i}\ln{y_i'} e=iyi^lnyi这个Cross-entropy它的式子乍看之下,会让你觉得有点匪夷所思,怎麼是这个样子呢

  • Cross-entropy是summation over所有的i
  • 然后把ŷ的第i位拿出来,乘上y’的第i位取Natural log
  • 然后再全部加起来

这个是Cross-entropy,那当ŷ跟y’一模一样的时候,你也可以Minimize Cross-entropy的值,此时,MSE会是最小的,Cross-entropy也会是最小的

為什麼会有Cross-entropy,这麼奇怪的式子出现呢?

image-20210320201703299

那如果要讲得长一点的话,这整个故事我们可以把它讲成,Make Minimize Cross-entropy其实就是maximize likelihood,你很可能在很多地方,都听过likelihood这个词汇,详见过去上课影片

所以如果有一天有人问你说,如果我们今天在做分类问题的时候,maximize likelihood,跟Minimize Cross-entropy,有什麼关係的时候——其实它们是同一件事情的不同说法。

所以假设你可以接受说,我们在训练一个classifier的时候,应该要maximize likelihood就可以接受,应该要Minimizing Cross-entropy

在pytorch裡面,Cross-entropy跟Soft-max,他们是被绑在一起的,他们是一个Set,你只要Copy Cross-entropy,裡面就自动内建了Soft-max

那接下来从optimization的角度,来说明相较於Mean Square Error,Cross-entropy是被更常用在分类上,

那这个部分,你完全可以在数学上面做证明,但是我这边,是直接用举例的方式来跟你说明,如果你真的非常想看数学证明的话,我把连结放在这边http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/Lecture/Deep%20More%20(v2).ecm.mp4/index.html你可以一下过去上课的录影

如果你不想知道的话,那我们就是举一个例子来告诉你说,為什麼是Cross-entropy比较好

image-20210320205142242

做一个3个Class的分类

Network先输出y₁ y₂ y₃,在通过soft-max以后,產生y₁’ y₂’跟y₃’

那接下来假设我们的正确答案就是100,我们要去计算100这个向量,跟y₁’ y₂’跟y₃’他们之间的距离,那这个距离我们用е来表示,е可以是Mean square error,也可以是Cross-entropy,

我们现在假设y₁的变化是从-10到10,y₂的变化也是从-10到10,y₃我们就固定设成-1000

因為y₃设很小,所以过soft-max以后y₃’就非常趋近於0,它跟正确答案非常接近,且它对我们的结果影响很少

总之我们y₃设一个定值,我们只看 y 1 y_1 y1 y 2 y_2 y2有变化的时候,对我们的e对我们的Loss对我们loss有什麼样的影响

那我们看一下 如果我们这个e,设定為Mean Square Error,跟Cross-entropy的时候,算出来的Error surface会有什麼样,不一样的地方.底下这两个图,就分别在我们e是Mean square error,跟Cross-entropy的时候,y₁ y₂的变化对loss的影响,对Error surface的影响,

image-20210320205913652

我们这边是用红色代表Loss大,蓝色代表Loss小

  • 那如果今天y₁很大 y₂很小,就代表y₁’会很接近1,y₂’会很接近0,所以不管是对Mean Square Error,或是Cross-entropy而言,y₁大 y₂小的时候 Loss都是小的

  • 如果y₁小 y₂大的话,这边y₁’就是0 y₂’就是1,所以这个时候Loss会比较大

所以这两个图都是左上角Loss大,右下角Loss小,所以我们就期待说,我们最后在Training的时候,我们的参数可以走到右下角的地方

image-20210320210341112

那假设我们开始的地方,都是左上角

  • 如果我们选择Cross-Entropy,左上角这个地方,它是有斜率的,所以你有办法透过gradient,一路往右下的地方走,
  • 如果你选Mean square error的话,你就卡住了,Mean square error在这种Loss很大的地方,它是非常平坦的,它的gradient是非常小趋近於0的,如果你初始的时候在这个地方,离你的目标非常远,那它gradient又很小,你就会没有办法用gradient descent,顺利的走到右下角的地方去,

所以你如果你今天自己在做classification,你选Mean square error的时候,你有非常大的可能性会train不起来,当然这个是在你没有好的optimizer的情况下,今天如果你用Adam,这个地方gradient很小,那gradient很小之后,它learning rate之后会自动帮你调大,也许你还是有机会走到右下角,不过这会让你的training,比较困难一点,让你training的起步呢,比较慢一点

所以这边有一个很好的例子,是告诉我们说,就算是Loss function的定义,都可能影响Training是不是容易这件事情,刚才说要用神罗天征,直接把error surface炸平,这边就是一个好的例子告诉我们说,你可以改Loss function,居然可以改变optimization的难度

这篇关于【李宏毅深度学习】(task5)分类Classification的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321670

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识