李宏毅ML-机器学习基本概念简介

news2024/11/29 18:46:31

机器学习基本概念简介

Machine Learning 约等于 Looking for a function.

Different types of functions:
Regression: The function outputs a scalar.
在这里插入图片描述
Classification: Given options(classes), the function outputs the correct one.

在这里插入图片描述
How to find a function? => 预测本频道观看人数的例子

  1. Function with Unknown Parameters
    猜测 Model : y = b + w x 1 y = b + wx_1 y=b+wx1
    y : n o .   o f   v i e w s   o n   2 / 26 y :no. \ of \ views\ on\ 2/26 y:no. of views on 2/26
    x 1 : n o .   o f   v i e w s   o n   2 / 25 x_1 : no.\ of \ views\ on\ 2/25 x1:no. of views on 2/25 (feature)
    w   a n d   b   a r e   u n k o n w n   p a r a m e t e r s   w h i c h   a r e   l e a r n e d   f r o m   d a t a . w\ and\ b\ are\ unkonwn\ parameters\ which\ are\ learned\ from\ data. w and b are unkonwn parameters which are learned from data.
    注:w(weight) b(bias)

  2. Define Loss from Training Data

  • Loss is a function of parameters. L(b, w)
  • Loss : how good a set of values is.

简而言之,就是当给未知参数 w 和 b 设定一组值以后,这个模型的性能有多好?举个栗子看看
在这里插入图片描述
采用 MAE 作为损失函数,定义损失函数为: L = 1 N ∑ n e n L = \frac{1}{N} \sum_n e_n L=N1nen
在这里插入图片描述
如下图所示为等高线图,越偏红色的 Loss 越大,说明 w 和 b 的取值比较差,预测结果误差比较大;越偏蓝色的 Loss 越小,说明 w 和 b 的取值比较好,预测结果误差比较小。
Error Surface: 在试了不同的参数取值后,计算出来不同的 Loss,从而画出来的等高线图叫作 Error Surface.
在这里插入图片描述
3. Optimization
w ∗ , b ∗ = a r g m i n w , b L w^* , b^* = argmin_{w,b} L w,b=argminw,bL
找到使得 Loss 值最小的 w 和 b,此为最优解
使用的优化方法:梯度下降法(Gradient Descent)

此时的 Loss 为只有一个参数 w 的情况

  • w 随机设置一个初始值
  • 计算 w = w 0 w = w^0 w=w0 时 w 对 L 的微分,即切线的斜率
    然后更新参数,即 w 1 = ← w 0 − η ∂ L ∂ w ∣ w = w 0 w_1 = \leftarrow w_0 - \eta \frac{\partial L}{\partial w} |_{w=w_0} w1=←w0ηwLw=w0
    当斜率小于 0 时,左边高右边低,w 往右边移动可以让 Loss 变大,即 increase w
    当斜率大于 0 时,左边低右边高,w 往左边移动可以让 Loss 变小,即 decrease w
    那么移动的步伐有多大呢?取决于两个因素:斜率的大小和 η \eta η 的大小。
    η \eta η 是 learning rate, 为 hyperparameter, 需要人工设定
  • Update w iteratively

如此循环往复,直到停下来,那么会迭代更新参数多少次呢?

  • 人为设置更新次数,此为 hyperparameter,例如 10000 次
  • w 对 L 的微分为0,参数不再更新,便会停下来
    在这里插入图片描述
    在这里插入图片描述
    w = w T w = w^T w=wT 时,切线的斜率为 0,w 不再更新,便会停下来,但此时 w T w^T wT 这个点不是使得 Loss 最小的那个点,此时的 Loss 值为 Local minima,其实真正的让 Loss 最小的那个点在 global minima 对应的 w 处。
    我们先暂时相信 Gradient Descent 有 Local minima 的问题,但其实真正的痛点不是这个,继续往下研究
    在这里插入图片描述

此时的 Loss 为有两个参数 w,b 的情况

  • w 和 b 随机设置一个初始值
  • 计算微分,然后更新参数
    w 1 = ← w 0 − η ∂ L ∂ w ∣ w = w 0 w_1 = \leftarrow w_0 - \eta \frac{\partial L}{\partial w} |_{w=w_0} w1=←w0ηwLw=w0
    b 1 = ← b 0 − η ∂ L ∂ b ∣ b = b 0 b_1 = \leftarrow b_0 - \eta \frac{\partial L}{\partial b} |_{b=b_0} b1=←b0ηbLb=b0
  • Update w and b iteratively
    在程序中,求解微分只需要一行代码就可以搞定
    在这里插入图片描述
    在等高线图中,参数的位置又是如何移动的呢?
    随便在某个位置选定 Loss 的初始值,计算 w 对 L 的微分、b 对 L 的微分,参数更新的方向为 ( − η ∂ L ∂ w , − η ∂ L ∂ b ) (-\eta \frac{\partial L}{\partial w}, -\eta \frac{\partial L}{\partial b}) (ηwL,ηbL),如此这样,一直移动下去,在方向向量等于 0 向量时停下来,期待找到一种不错的 w 和 b
    在这里插入图片描述
    其实在训练模型的过程也就是这三步,最后在 w = 0.97,b = 0.1k 时 Loss 最小,为 0.48 k,所以在 2017 - 2020 年的资料上训练后得到的模型为 y = 0.1 k + 0.97 x 1 y = 0.1k + 0.97x_1 y=0.1k+0.97x1
    训练模型结束后,拿 2021 年的资料(即模型没有“看见”过的资料)去预测结果,并计算 Loss,得到 L ′ = 0.58 k L^{\prime} = 0.58k L=0.58k
    在这里插入图片描述
    分析一下结果:红色代表真实的观看人数,蓝色代表模型预测的观看人数,对比红蓝两条曲线,不难发现,红色曲线往右平移一段距离也就是蓝色曲线,所以这个模型基本上就是拿前天的观看人数来预测隔天的观看人数。
    每 7 天内有 2 天的观看人数比较低,是因为这两天是周五、六。
    在这里插入图片描述
    这个模型不是很好,有什么办法可以改进呢?
    现在我们用前 7 天的资料来预测观看人数,修改模型
    在这里插入图片描述
    再用前 28天、56天的资料来分别预测观看人数,修改模型
    在这里插入图片描述
    上述模型均为 Linear models

Linear models are too simple. We need more sophisticated models.

蓝色的直线代表 linear models,y 随 x 1 x_1 x1 的增大而增大,即频道的每日观看人数只会越来越多,但现实生活中的情况并没有那么简单,有起有伏。
图中的红色的分段曲线更接近于现实生活中的情况,但 linear models 并不能表示出这种情况,这是 linear models 的限制,适用的情形比较单一,这种限制称为 model bias.
因此,我们需要更加 flexible 的模型。
在这里插入图片描述
既然红色曲线更加趋近于现实生活中的情况,那么该如何表示它呢?
从下图中的红色曲线可以看出,其实红色曲线是由常数项 + 一堆蓝 fun(function)得来。
在这里插入图片描述
类似于红色曲线的还有很多,它们都叫 piece-wise linear curve
红色曲线的转折点越多,代表所需要的蓝 fun 也就越多。
在这里插入图片描述
如果遇到的红色曲线类似于下图所示的曲线,变得更加的平滑,已不再是分段线性曲线了,那我们又该如何表示呢?
我们可以用一个分段线性曲线近似地逼近连续曲线。
为了有更好地近似逼近于连续曲线,所需要的蓝 fun 也就越多。
在这里插入图片描述
那么,我们又该如何表示蓝 fun 呢?如何把它写出来呢?
我们用 sigmoid function 来逼近蓝 fun
sigmoid function: y = c   1 1 + e − ( b + w x 1 ) = c   s i g m o i d ( b + w x 1 ) y = c \ \frac{1}{1+e^{-(b+wx_1)}} = c\ sigmoid(b+wx_1) y=c 1+e(b+wx1)1=c sigmoid(b+wx1), 简单地理解为 s 型的 function
当 x 趋向于无穷大时,exponential 就会消失,y 就会趋近于常数 c;
当 x 趋向于无穷小时,exponential 就会很大,y 就会趋近于 0.
在这里插入图片描述
只要调整 w, b, c,取不同的值,就可以得到不同的 sigmoid function,然后就可以用不同的 sigmoid function 去逼近蓝 fun
在这里插入图片描述
蓝 fun 我们已经会表示了,现在我们可以把红色曲线给表示出来
y = b + ∑ i c i   s i g m o i d ( b i + w i x 1 ) y=b+\sum_i c_i \ sigmoid(b_i+w_ix_1) y=b+ici sigmoid(bi+wix1)
我们给 w, b, c 不同的取值,就可以获得不同的蓝 fun,然后蓝 fun 迭加起来就可以得到不同的 red curve,就可以得到不同的 piece-wise linear curve,最后就可以用 piece-wise linear curve 来逼近不同的 continuous curve.
在这里插入图片描述
模型已由最开始的 linear model,变成了更加 flexible 的model,可以表示多种情况,现在我们要把模型变成带有更多 feature 的 model.
y = b + ∑ i c i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_i c_i sigmoid(b_i+\sum_j w_{ij}x_j) y=b+icisigmoid(bi+jwijxj)
在这里插入图片描述
举个栗子,有 3 个 feature,有 3 个 sigmoid
在这里插入图片描述
把蓝色方框里面的部分转化成线性代数常用的表示形式:向量形式
在这里插入图片描述
σ \sigma σ 可以表示 activation function,这里使用 sigmoid 函数,把向量 r 代入 σ \sigma σ 函数得到的结果,简记为向量 a
在这里插入图片描述
模型可以表示为向量 a 与 向量 c 的 transpose 相乘后,再加上 b
在这里插入图片描述
模型用矩阵向量相乘可以表示为如下图所示的形式
在这里插入图片描述

现在已经得到了比较复杂的 model,我们来重新训练模型

  1. Function with unknown parameters 把所有的未知参数拼接成一个列向量 θ \theta θ
    在这里插入图片描述
  2. Define loss from training data
    在这里插入图片描述
  3. Optimization
    在这里插入图片描述
    在这里插入图片描述
    实际上,把 N 笔资料分成若干份 B 笔资料,拿一个 batch 算出 gradient,然后更新参数,每一次更新参数为一次 update,每一次看完所有的 batch 为一个 epoch.
    在这里插入图片描述
    模型训练了一个 epoch,但要想知道参数 update 了几次,取决于 batch 的大小。
    在这里插入图片描述
    是否也可以把模型定义成其他形式呢?
    我们可以使用 ReLU 函数来代替 Sigmoid 函数
    ReLU: rectified linear unit 被纠正了的线性单元 y = c   m a x ( 0 , b + w x 1 ) y = c\ max(0,b+wx_1) y=c max(0,b+wx1)
    如果 b + w x 1 b+wx_1 b+wx1 的值小于 0,输出为 0;反之,输出 b + w x 1 b + wx_1 b+wx1
    把两个 ReLU 叠起来,就可以得到一个 Hard Sigmoid
    在这里插入图片描述
    在这里插入图片描述
    从实验结果可以看出,越来越多的 ReLU 可以使得模型的 training loss 与 testing loss 变小。
    在这里插入图片描述
    所得的模型结果仍旧不太理想,继续改模型
    我们把第一次通过激活函数输出的向量 a 再次代入激活函数得到 a ′ a^{\prime} a,即又加了一个 hidden layer
    在这里插入图片描述
    从实验结果可以看出,在输入层之后加入更多的隐藏层,可以使得模型的 training loss 与 testing loss 更小。
    在这里插入图片描述
    在这里插入图片描述
    此时,我们需要给模型起一个好的名字,叫做 Neural Network,其里面的一个个 activation function 也就叫做 Neuron,一排 Neurons 就叫做 hidden layer.
    而模型中有许多个 hidden layers 就意味着这个模型 very deep. → \rightarrow deep learning
    在这里插入图片描述
    因此,回顾前面讲的这么多,只要有了足够多排的 ReLU、Sigmoid,我们就可以将 linear model 逼近任意复杂的 piece-wise function 和 continuous function.
    在这里插入图片描述

我们抛出一个疑问:Why we want “deep” network, not “fat” network?

后面继续再讨论。
如果我们把模型加到 4 层,trainging loss 变小了,testing loss 反而变大了,这其实是一种 overfitting 现象,即 Better on training data, worse on unseen data.
在这里插入图片描述
如果是要挑选一个模型用来预测今天的观看人数,当然是选用 3 层的模型啦。
至于模型选择的问题,后面会再继续讲解。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么学完了 C 语言觉得自己什么都干不了?

其他方向不了解哈,我2013年大一开始自学C语言,然后就开始做嵌入式,大学四年,到现在毕业又六年,C语言已经陪我十年了,可以说是一直坚持且养家糊口的工具。 所以,别的也许不行,但是嵌…

使用.htaccess设置图片防盗链的详细方法

对于虚拟主机用户来说,最方便的莫过于利用.htaccess设置图片防盗链了。上网搜了一下,.htaccess规则写法很多,但是大部分的区别在于最后一行,下面我们先看看正确的.htaccess防盗链写法,稍后我再详细解释一下最后一行的重…

JAVA实现代码热更新

JAVA实现代码热更新引言类加载器实现热更新思路多种多样的加载来源SPI服务发现机制完整代码引言 本文将带领大家利用Java的类加载器加SPI服务发现机制实现一个简易的代码热更新工具。 类加载相关知识可以参考: 深入理解JVM虚拟机第三版, 深入理解JVM虚拟机(第二版)—国外的,自…

从零开始搭建一个vue demo工程

查询了不少文章,有知乎、CSDN、简书、思否等,发现如下操作性比较好,特此记录 目录 使用vue-cli创建 使用vite创建 Vue2和Vue3的代表作 参考文章 使用vue-cli创建 Vue3-使用vue/cli搭建项目 - 个人文章 - SegmentFault 思否 此处使用了v…

一文看懂基站无源交调

众所周知,有源器件会在系统中产生非线性效应。虽然已开发出多种技术来改善此类器件在设计和运行阶段的性能,但容易忽视的是,无源器件也可能引入非线性效应;虽然有时相对较小,但若不加以校正,这些非线性效应…

将vue项目打包成电脑端应用.exe

目录 第一步:下载模板electron-quick-start 第二步:进入到下载好的模板文件当中(electron-quick-start) 第三步:打包自己的项目(npm run build) 第四步:删掉官方demo下的index.html文件 …

Framework入门

一入门简介Android系统建构分为四层由上到下依次是应用层,应用框架层,依赖库层,内核层,framework处于第二层,它为应用层的开发者提供基本功能,帮助开发快速构建应用程序。FrameWork框架采用c/s架构&#xf…

Java之反射爆破操作

一些方法 首先说一下-getField/Method什么的这种不带Declared只能获取到对应public的属性/方法 只有带Declared可以获取到非public的属性/方法 再看不带s和带s区别 不带s只获取对应的构造器/方法 比如说构造器 getDeclaredConstructor(int.class,String class) 就会获取不管什么…

【数据分析】【Pandas】(一)如何制作频率分布直方图

文章目录概述1. 直方图2. 密度图概述 计算一组数据的分布有助于我们更好的了解数据构成,我们可以通过直方图或密度图,将离散的数据通过连续的方式展现出来。 数据分布(频数分布):在各组按顺序排列的基础上&#xff0c…

小伍说,商业发展均是顺势而为,【字节跳动】之所以成功是因为顺应趋势,成功是必然结果!

昨天看完2021年 刘润【进化的力量】年终演讲,让我深刻感受到两点: 1、所有商业的变化,都是顺势而为! 2、所有理所当然的现在,都是曾经不可思议的未来,所有现在不可思议的未来,可能都是明天理所…

JavaSE笔记——函数式编程(高级集合类和收集器)

文章目录前言一、方法引用二、元素顺序三、使用收集器1.转换成其他集合2.转换成值3.数据分块4.数据分组5.字符串6.组合收集器总结前言 前面介绍了集合类的部分变化,事实上,Java 8 对集合类的改进不止这些。现在是时候介绍一些高级主题了,包括…

LInkedList的模拟实现

在之前的文章笔者介绍了链表的实现:无头单向非循环链表的实现!感兴趣的各位老铁可以点进来看看:https://blog.csdn.net/weixin_64308540/article/details/128397961?spm1001.2014.3001.5502对于此篇博客,在一写出来,便…

java学习day72(乐友商城)微信支付实现

今日目标: 会调用订单系统接口 实现订单结算功能 实现微信支付功能 1.订单系统接口 我们不做开发,只讲解 1.1.导入订单服务 把课前资料提供的leyou-order复制到D:\heima\code\leyou目录。 然后在工程内导入: 然后导入module&#xff1a…

java:责任链设计模式配合Spring@Order注解使用场景

java:责任链设计模式配合SpringOrder注解使用场景 1 前言 java的责任链模式,经典使用的场景为SpringMVC的doDispatch下,针对请求的过滤链式行为。实际开发场景中,可配合Spring的Order注解,定义1个有顺序的链式Compon…

我在深圳的三次工厂旅程 (一)

2019年末加入一家人工智能AI创业公司,由于公司涉及到智能硬件产品,所以有机会参与到硬件产品的整个研发测试端、产品迭代流、工厂生产序等方面的这些事情。相对于研发测试、产品迭代这些在过往的工作中经历中相对比较熟悉和接触频繁,在软件产…

鉴定完毕!来看看跨年晚会谁假唱了…欧莱雅智能画眉设备;首个AI律师下月出庭;推特又裁员;GitHub今日热榜 | ShowMeAI资讯日报

👀日报合辑 | 🎡AI应用与工具大全 | 🔔公众号资料下载 | 🍩韩信子 🎡 『谁在假唱』技术手段分析跨年演唱会上的歌手们 各大卫视的跨年演唱会,你追了几场?看出来了谁在对口型?B站Up主…

【北京理工大学-Python 数据分析-2.2Matplotlib绘制饼图、直方图、极坐标、散点图】

pyplot的基础图标函数 函数说明plt.plot(x,y,fmt,…)绘制一个坐标图plt.boxplot(data,notch,position)绘制一个箱型图plt.bar(left,height,width,bottom)绘制一个条形图plt.barh(width,bottom,left,height)绘制一个横向条形图plt.polar(theta,r)绘制极坐标图plt.psd(x,NFFT256…

Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则

Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则docker-compose volumes语法语法格式及其三种变体1.无来源 :匿名挂载主机系统上的目录路径2.非路径源:具名挂载(常用)主机系统上的目录…

mysql idb,frm文件复制恢复

idb是innodb数据文件frm是innodb表结构文件在数据库的data目录下可以看到 data下的目录名就是数据库名,打开该数据库文件夹对于一个表有2个文件,一个以idb结尾,一个以frm结尾直接复制粘贴是不识别的,提示找不到该表解决方法&#…

在线实习项目|Python爬虫助力疫情数据追踪在线实习项目

项目介绍 项目背景:2019-NCOV新型冠状病毒引发的肺炎牵动全国人民的心,本项目希望通过大数据技术为抗击新冠肺炎贡献一份力量。 项目目标:使用PYTHON爬虫技术爬取疫情数据,从不同维度分析数据,并用 MATPLOT…