当前位置: 首页 > news >正文

Datawhale X 李宏毅苹果书 AI夏令营(深度学习入门)taks2

线性模型

机器学习很简单,第一步设未知函数,第二步定义损失函数,最后优化

由于线性模型比较简单,而且有很严重的限制,所以我们需要更复杂一点的模型

看到下面这个图,里面的红线是我们需要实现的

使用0、1、2、3条蓝线在不同的位置来拟合红线

虽然可以很容易的通过蓝线的结合来实现红线,但是如果出现更曲折的线段时,我们就需要更多的蓝色线去拟合

那么既然蓝色线很重要,接下来就先来学习一下:

给出一个函数式描述这条线:

                                             y=c\frac{1}{1+e^{-(b+wx_{1})}}

x_{1}趋近于正无穷时,e的-(b+wx_{1})趋近于0,那么整个表达式\frac{1}{1+e^{-(b+wx_{1})}}趋近于1,那么y此时趋近于c

x_{1}趋近于负无穷时,e的-(b+wx_{1})趋近于0,那么整个表达式\frac{1}{1+e^{-(b+wx_{1})}}趋近于0,那么y此时趋近于0

\frac{1}{1+e^{-(b+wx_{1})}}称为Sigmoid函数

c,b,w这三个参数分别影响曲线的高度、左右平移的幅度和倾斜度

不同的蓝色折线,参数不同

可以用y=b+wx_{1}来表示

此外,我们可以不只用一个特征 x1,可以用多个特征代入不同的 c, b, w,组合出各种不同的函数,从而得到更有灵活性(flexibility)的函数。

比如,我们还使用观看youtub中李宏毅老师深度学习的课程人数,来解释

x_{1}代表前一天的观看次数,x_{2} 两天前观看次数,x3 3 天前的观看次数,每一个 i 就代表了一个蓝色的函数。每一个蓝色的函数都用一个 Sigmoid 函数来比近似它,1,2,3 代表有个 Sigmoid 函数。b_{1}+w_{11}x_{1}+w_{12}x_{2}+w_{13}x_{3},w_{ij}代表在第 i 个 Sigmoid 里面,乘给第 j 个特征的权重,w 的第一个下标代表是现在在考虑的是第一个 Sigmoid 函数。

为了简化起见,括号里面的式子为

r_{1}=b_{1}+w_{11}x_{1}+w_{12}x_{2}+w_{13}x_{3}

r_{2}=b_{2}+w_{21}x_{1}+w_{22}x_{2}+w_{23}x_{3}

r_{3}=b_{3}+w_{31}x_{1}+w_{32}x_{2}+w_{33}x_{3}

我们可以用矩阵跟向量相乘的方法,写一个比较简洁的写法。
\begin{bmatrix} r_{1}\\ r_{2}\\ r_{3} \end{bmatrix}=\begin{bmatrix} b_{1}\\ b_{2}\\ b_{3} \end{bmatrix}+\begin{bmatrix} w_{11} & w_{12} & w_{13}\\ w_{21}&w_{22} &w_{23} \\ w_{31} &w_{32} &w_{33} \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix}

将其改成线性代数比较常用的表示方式为r = b + W x

篮框里面可以使用\delta (r)来表示,\delta就是Sigmoid函数

得到a_{1} a_{2} a_{3}之后分别乘c1,c2,c3加上b得到最后的y

构建出蓝色线的函数式之后,我们再来定义一下损失函数

这里我们先设未知参数,按行拼接后的一个长向量称为\Theta

接下来要定义损失。之前是 L(w, b),因为 w 跟 b 是未知的。现在未知的参数很多了,再把它一个一个列出来太累了,所以直接用 θ 来统设所有的参数,所以损失函数就变成 L(θ)。损失函数能够判断 θ 的好坏,其计算方法跟刚才只有两个参数的时候是一样的。先给定 θ 的值,即某一组 W, b, c^{T}, b 的值,再把一种特征 x 代进去,得到估测出来的 y,再计算一下跟真实的标签之间的误差 e。把所有的误差通通加起来,就得到损失。接下来下一步就是优化

                                        \Theta =\begin{bmatrix} \Theta _{1}\\ \Theta _{2}\\ \Theta _{3}\\ ... \end{bmatrix}

要找到 θ 让损失越小越好,可以让损失最小的一组 θ 称为 \Theta ^{*}。一开始要随机选一个初始数值\Theta _{0}

然后计算每一个未知参数对L的微分,得到g

针对小批量优化,每一个batch优化一次参数,一个epoch之后就会将所有的batch遍历完,有多少个batch就更新多少次

模型变形

上图这个折线就是我们刚才讨论的sigmoid函数的hard sigmoid

那么我们怎么用更简单的折线去实现它呢?

使用ReLU函数就可以

ReLU函数在x的负半轴都是0,在x的正半轴是y=x这个函数

Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络(neural network),每一排称为一层,称为隐藏层(hiddenlayer),很多的隐藏层就“深”,这套技术称为深度学习。

很多人都通过加深神经网络的层数减小了错误率,所以神经网络就越来越深了

2012 年的 AlexNet 有 8 层它的错误率是 16.4%,两年之后 VGG 有 19 层,错误率在图像识别上进步到 7.3 %。这都是在图像识别上一个基准的数据库(ImageNet)上面的结果,后来 GoogleNet 有 22 层,错误率降到 6.7%。而残差网络(Residual Network,ResNet)有 152 层,错误率降到 3.57%。

在训练数据和测试数据上的结果是不一致的,这种情况称为过拟合(overfitting)。

机器学习框架

我们会有一堆训练的数据以及测试数据如式所示,测试集就是只有 x 没有 y。

训练数据:\begin{Bmatrix} (x^{1},y^{1}) ,& (x^{2},y^{2}) ,&... &, (x^{n},y^{n}) \end{Bmatrix}

 测试数据:\begin{Bmatrix} x^{n+1}, & x^{n+2} ,&... ,& x^{n+m} \end{Bmatrix}

总结一下训练过程:

1. 先写出一个有未知数 θ 的函数,θ 代表一个模型里面所有的未知参数。fθfθ(x) 的意思就是函数叫 fθfθ(x),输入的特征为 x,;

2. 定义损失,损失是一个函数,其输入就是一组参数,去判断这一组参数的好坏;

3. 解一个优化的问题,找一个 θ,该 θ 可以让损失的值越小越好。让损失的值最小的 θ 为\Theta ^{*},即 \Theta =argminL

有了 \Theta ^{*}以后,就把它拿来用在测试集上,也就是把\Theta ^{*}带入这些未知的参数,本来f_{\Theta }(x)里面有一些未知的参数,现在 θ 用 \Theta ^{*}来取代,输入是测试集,输出的结果存起来。

相关文章:

  • 跟《经济学人》学英文:2024年08月24日这期 What to make of America’s topsy-turvy economy
  • centos7安装Kafka单节点环境部署三-安装Logstash
  • MURF860AC-ASEMI智能AI专用MURF860AC
  • 虚幻游戏开发| 编辑器内正常运行但打包出错
  • 高级java每日一道面试题-2024年8月23日-框架篇[SpringBoot篇]-什么是JavaConfig?
  • ACM模式下算法题输入输出攻略【C++】
  • Adobe Lightroom Classic (LRC) 软件下载安装和软件使用介绍
  • 【Java】/* 与树有关的一些概念 */
  • u盘突然说要格式化才能访问?如何跳过格式化打开U盘
  • Java Web —— 第八天(登录功能)
  • SmartPing-记录下
  • Tita的OKR :产品经理的OKR
  • 测试用例(还需要输入1个字)
  • 背包问题【算法 07】
  • 自然语言处理系列三十二》 语义相似度》语义相似度概念及入门
  • ES6指北【2】—— 箭头函数
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • C++类的相互关联
  • Consul Config 使用Git做版本控制的实现
  • Docker: 容器互访的三种方式
  • Java多线程(4):使用线程池执行定时任务
  • Java教程_软件开发基础
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PermissionScope Swift4 兼容问题
  • React-flux杂记
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Twitter赢在开放,三年创造奇迹
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从PHP迁移至Golang - 基础篇
  • 每天10道Java面试题,跟我走,offer有!
  • 目录与文件属性:编写ls
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 十年未变!安全,谁之责?(下)
  • Linux权限管理(week1_day5)--技术流ken
  • 进程与线程(三)——进程/线程间通信
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #Z0458. 树的中心2
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #微信小程序:微信小程序常见的配置传值
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (42)STM32——LCD显示屏实验笔记
  • (done) 两个矩阵 “相似” 是什么意思?
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (三)SvelteKit教程:layout 文件
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)nsfocus-绿盟科技笔试题目
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core控制台应用程序初识
  • .net refrector
  • .net 简单实现MD5
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .netcore如何运行环境安装到Linux服务器