深度学习——线性神经网络(一、线性回归)

news2024/11/27 4:22:24

目录

  • 一、线性回归
    • 1.1 线性回归的基本元素
      • 1.1.1 术语介绍
      • 1.1.2 线性模型
      • 1.1.3 损失函数
      • 1.1.4 解析解
      • 1.1.5 随机梯度下降
      • 1.1.6 模型预测
    • 1.2 正态分布与平方损失

  因为线性神经网络篇幅比较长,就拆成几篇博客分开发布。目录序号保持连贯性。

一、线性回归

  回归(regression)是能为一个或多个自变量与因变量之间的关系建模的一类方法,经常用来表示输入和输出之间的关系。

1.1 线性回归的基本元素

1.1.1 术语介绍

  举一个现实生活中的例子:数据公司希望根据房屋的面积和房龄来估算房屋价格。为了开发一个能预测房屋价格的模型,需要收集真实的往年数据,包含房屋价格、面积和房龄等数据,构成一个数据集。
  在机器学习的术语中,该数据集称为训练数据集或训练集。每行数据(比如一次房屋交易相对应的数据)称为数据样本,或者称为数据点或数据实例。我们把试图预测的目标(比如预测房屋价格)称为标签或目标。预测过程所依据的自变量(面积和房龄)称为特征或协变量。

1.1.2 线性模型

  线性假设是指目标(房屋价格)可以表示为特征(面积和房龄)的加权和。
p r i c e = w a r e a ⋅ a r e a + w a g e ⋅ a g e + b price=w_{area} \cdot area + w_{age} \cdot age+b price=wareaarea+wageage+b
  其中, w a r e a w_{area} warea w a g e w_{age} wage称为权重,权重决定了每个特征对预测值的影响,b称为偏置、偏移量或截距。偏置是指当所有特征都取值为0时,预测值应该为多少。(即使现实生活中不会有任何房屋的面积是0或者房龄也正好为0)我们需要设置偏置项,如果没有偏置项,我们模型的表达能力会受到限制。
  上式可以理解为输入特征的一个仿射变换,仿射变换的特点是通过加权和对特征进行线性变换,并通过偏置项进行平移。
  给定一个数据集,我们的目标是寻找模型的权重 w w w和偏置 b b b,使得根据模型做出的预测大体符合数据中的真实价格。输出的预测值由输入特征通过线性模型的仿射变化确定,而仿射变换又由所选权重和偏置确定。

1.1.3 损失函数

  损失函数能够量化目标的实际值与观测值之间的差距。通常会选择非负数作为损失,且数值越小表示损失越小,完美预测时的损失为0.回归问题中最常用的损失函数是平方误差函数。
  当样本 i i i的预测值为 y ^ ( i ) \hat y^{(i)} y^(i),其相应的真实标签为 y ( i ) y^{(i)} y(i)时,平方误差可以定义为以下公式:
l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 l^{(i)}(\bm w,b)=\frac 1 2 (\hat y^{(i)}-y^{(i)})^2 l(i)(w,b)=21(y^(i)y(i))2

常数 1 2 \frac 1 2 21不会带来本质的差别,但这样在形式上稍微简单一些(因为这样对损失函数求导后常数系数为1)

  为了度量模型在整个数据集上的预测质量,我们需要计算在训练集n个样本上的损失价值(等价于求和)
L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w T x ( i ) + b − y ( i ) ) 2 L(\bm w,b)=\frac 1 n \sum_{i=1}^n l^{(i)}(\bm w,b)=\frac 1 n \sum_{i=1}^n \frac 1 2(\bm w^T \bm x^{(i)}+b-y^{(i)})^2 L(w,b)=n1i=1nl(i)(w,b)=n1i=1n21(wTx(i)+by(i))2
  在训练模型时,我们希望寻找一组参数 ( w ∗ , b ∗ ) (\bm w^*,b^*) (w,b),这组参数能最小化所有训练样本上的总损失。
w ∗ , b ∗ = arg min ⁡ w , b L ( w , b ) \bm w^*,b^*=\argmin_{w,b} L(\bm w,b) w,b=w,bargminL(w,b)

1.1.4 解析解

  线性回归是一个比较简单的优化问题,线性回归的解可以用一个公式简单的表示,这类解叫做解析解
  我们先将偏置 b b b合并到参数 w \bm w w中,合并方法是在包含所有参数的矩阵中附加一列,我们的预测问题是最小化 ∥ y − X w ∥ 2 {\Vert \bm y-\bm{Xw} \Vert}^2 yXw2。这在损失平面上只有一个临界点,这个临界点对应于整个区域的损失极小值点。将算是关于 w \bm w w的导数设为0,得到解析解:
w ∗ = ( X T X ) − 1 X T y {\bm w}^*={(\bm X^T \bm X)}^{-1} \bm X^T \bm y w=(XTX)1XTy

  像线性回归这样的简单问题存在解析解,但并不是所有问题都存在解析解。
  解析解可以进行很好的数学分析,但解析解对问题的限制很严格,导致它无法广泛应用在深度学习中。

1.1.5 随机梯度下降

  梯度下降的方法几乎可以优化所有的深度学习模型。它通过不断地在损失函数递减的方向上更新参数来降低误差。
  梯度下降的最简单的用法是计算损失函数(数据集中所有样本的损失均值)关于模型参数的导数(这里也可以称为梯度)。但实际中的执行可能会非常慢。因为在每次更新参数之前,我们必须遍历整个数据集。因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本,这种变体叫做小批量随机梯度下降.
  在每次迭代中,我们先随机抽取一个小批量 B \bm B B,它是由固定数量的训练样本组成的;然后,计算小批量的损失均值关于模型参数的导数(也可以称为梯度);最后,将梯度乘以一个预先确定的正数 η \bm \eta η,并从当前参数的值中减掉。
  数学公式表示更新过程:
( w , b ) ← ( w , b ) − η ∣ B ∣ ∑ i ∈ B ∂ ( w , b ) l ( i ) ( w , b ) (\bm w,b) \leftarrow (\bm w,b)- \frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} \partial_{(\bm w,b)} l^{(i)} (\bm w,b) (w,b)(w,b)BηiB(w,b)l(i)(w,b)
  梯度更新算法的步骤如下:
  (1)初始化模型参数的值,如随机初始化;
  (2)从数据集中随机抽取小批量样本且在负梯度方向上更新参数,并不断迭代这一步骤。
  对于平方损失和仿射变换,可以写成如下公式:
w ← w − η ∣ B ∣ ∑ i ∈ B ∂ ( w ) l ( i ) ( w , b ) = w − η ∣ B ∣ ∑ i ∈ B x ( i ) ( w T x ( i ) + b − y ( i ) ) \bm w \leftarrow \bm w-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} \partial_{(w)} l^{(i)} (\bm w,b)=\bm w-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} \bm x^{(i)} (\bm w^T \bm x^{(i)}+b-y^{(i)}) wwBηiB(w)l(i)(w,b)=wBηiBx(i)(wTx(i)+by(i))
b ← b − η ∣ B ∣ ∑ i ∈ B ∂ ( b ) l ( i ) ( w , b ) = b − η ∣ B ∣ ∑ i ∈ B ( w T x ( i ) + b − y ( i ) ) b \leftarrow b-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B}\partial_{(b)} l^{(i)} (\bm w,b)=b-\frac {\eta} {\vert\bm B \vert} \sum_{i \in \bm B} (\bm w^T \bm x^{(i)}+b-y^{(i)}) bbBηiB(b)l(i)(w,b)=bBηiB(wTx(i)+by(i))
  其中, ∣ B ∣ \vert \bm B \vert B表示每个小批量中的样本数,也称为批量大小 η \eta η表示学习率

  批量大小和学习率的值通常是预先手动指定,而不是通过模型训练得到的。
  这些可以调整但不在训练过程中更新的参数称为超参数
  调参是选择超参数的过程。超参数通常是我们根据训练迭代结果来调整的,而训练迭代结果是在独立的验证数据集上评估得到的。

1.1.6 模型预测

  在训练了预先确定的若干迭代后(或者直到满足某些其他停止条件后),我们记录下模型参数的估计值,表示为 w ^ , b ^ \bm {\hat {w}},\hat {b} w^,b^
  给定“已学习”的线性回归模型 w ^ T x + b ^ \bm {\hat {w}}^T \bm x +\hat {b} w^Tx+b^,现在可以通过房屋面积 x 1 x_1 x1和房龄 x 2 x_2 x2两个特征来估计一个新的房屋价格。

  给定特征的情况下,估计目标的过程通常称为预测

1.2 正态分布与平方损失

  通过对噪声分布的假设来解读平方损失目标函数。正态分布和线性回归之间的关系很密切。
  正态分布也称为高斯分布,若随机变量 x x x具有均值 μ \mu μ和方差 σ 2 \sigma^2 σ2,其正态分布概率密度函数如下:
p ( x ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( x − u ) 2 ) p(x)= \frac 1 {\sqrt {2 \pi \sigma^2}} \exp \Bigl( - \frac 1 {2 \sigma^2}(x-u)^2 \Bigr) p(x)=2πσ2 1exp(2σ21(xu)2)
  定义一个Python函数来计算正态分布:

def normal(x, mu, sigma):
    p = 1 / math.sqrt(2 * math.pi * sigma**2)
    return p * np.exp(-0.5 / sigma**2 * (x - mu)**2)
# 再次使用numpy进行可视化
x = np.arange(-7, 7, 0.01)

# 均值和标准差对
params = [(0, 1), (0, 2), (3, 1)]
d2l.plot(x, [normal(x, mu, sigma) for mu, sigma in params], xlabel='x',
         ylabel='p(x)', figsize=(4.5, 2.5),
         legend=[f'mean {mu}, std {sigma}' for mu, sigma in params])

在这里插入图片描述

  均方误差损失函数可以用于线性回归的一个原因是:假设观测中包含噪声,其中噪声服从正态分布,噪声正态分布如下式:
y = w T x + b + ε , 其中 ε ∼ N ( 0 , σ 2 ) y=\bm w^T \bm x+b+\varepsilon ,其中\varepsilon \sim N(0,\sigma^2) y=wTx+b+ε,其中εN(0,σ2)
  现在可以写出通过给定的x观测到特定的y的似然:
P ( y ∣ x ) = 1 2 π σ 2 exp ⁡ ( − 1 2 σ 2 ( y − w T x − b ) 2 ) P(y \vert \bm x)=\frac 1 {\sqrt {2 \pi \sigma^2}} \exp \Bigl( - \frac 1 {2 \sigma^2}(y-\bm w^T \bm x-b)^2 \Bigr) P(yx)=2πσ2 1exp(2σ21(ywTxb)2)
  根据极大似然估计法,参数 w \bm w w b b b的最优值是使整个数据集的似然最大的值:
P ( y ∣ X ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ) P(\bm y \vert \bm X)=\prod_{i=1}^n p(y^{(i)} \vert \bm x^{(i)}) P(yX)=i=1np(y(i)x(i))
  根据极大似然估计法选择的估计量称为极大似然估计量。虽然使许多指数函数的乘积最大化看起来很困难,但是可以通过最大化似然对数来简化。由于一般情况下,优化通常指最小化而不是最大化,因此可以改为最小化负对数似然 − log ⁡ P ( y ∣ X ) -\log P(\bm y \vert \bm X) logP(yX)
− log ⁡ P ( y ∣ X ) = ∑ i = 1 n 1 2 log ⁡ ( 2 π σ 2 ) + 1 2 σ 2 ( y ( i ) − w T x ( i ) − b ) 2 -\log P(\bm y \vert \bm X) = \sum_{i=1}^n \frac 1 2 \log(2 \pi \sigma^2)+\frac 1 {2 \sigma^2} (y^{(i)}-\bm w^T \bm x^{(i)}-b)^2 logP(yX)=i=1n21log(2πσ2)+2σ21(y(i)wTx(i)b)2
  因此,在高斯噪声的假设下,最小化均方误差等价于对线性模型的极大似然估计。

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

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

相关文章

基于单片机智能百叶窗卷帘门自动门系统

** 文章目录 前言概要功能设计设计思路 软件设计效果图 程序文章目录 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…

二叉树深度学习——将二叉搜索树转化为排序的双向链表

1.题目解析 题目来源:LCR 155.将二叉搜索树转化为排序的双向链表 测试用例 2.算法原理 首先题目要求原地进行修改并且要求左指针代表前驱指针,右指针代表后继指针,所以思路就是 1.使用前序遍历创建两个指针cur、prev代表当前节点与前一个节点…

STM32三种启动模式:【详细讲解】

STM32在上电后,从那里启动是由BOOT0和BOOT1引脚的电平决定的,如下表: BOOT模式选引脚启动模式BOOT0BOOT1X0主Flash启动01系统存储器启动11内置SRAM启动 BOOT 引脚的值在重置后 SYSCLK 的第四个上升沿时被锁定。在重置后,由用户决定是如何设…

硬件开发笔记(三十):TPS54331电源设计(三):设计好的原理图转设计PCB布板,12V输入电路布局设计

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142694484 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

挖矿病毒记录 WinRing0x64.sys

之前下载过福晰pdf编辑器,使用正常。 某天发现机器启动后,过个几分钟(具体为5min)会自动运行几个 cmd 脚本(一闪而过),但是打开任务管理器没有发现异常程序(后面发现病毒程序伪装成System系统程序,见下图)…

Ascend C算子加速:优化与创新

Ascend C算子加速:优化与创新 随着大模型的迅速发展和人工智能计算需求的剧增,优化硬件性能变得尤为重要。针对这一需求,昇腾推出了Ascend Operator Library(AOL)算子加速库,专注于为开发者提供高效的算子…

C++-vector模拟实现

###vector底层相当于是数组,查看源码可以发现,这个类的私有成员变量是三个迭代器;在实现时迭代器就可以当作是vector里面的元素的指针类型; ###vector是一个类模板,实现时也应当按照这样的写法用一个模板去实现&#…

某项目实战代码(一)

1.下载安装并配置环境变量openssl,可自行在网上寻找。 2.在项目中导入opensll中的“包含(include)”和“库(lib)” 3.选择debug x86平台,不然会报错。 4.运行结果如下。可自行比对 md5 value: 33b3bc8e05b4fcc16bd531dd9adac166 5.代码如下 #define…

基于STM32的智能家居灯光控制系统设计

引言 本项目将使用STM32微控制器实现一个智能家居灯光控制系统,能够通过按键、遥控器或无线模块远程控制家庭照明。该项目展示了如何结合STM32的外设功能,实现对灯光的智能化控制,提升家居生活的便利性和节能效果。 环境准备 1. 硬件设备 …

unix中的exec族函数介绍

一、前言 本文将介绍unix中exec族函数,包括其作用以及使用方法。当一个进程调用fork函数创建一个新进程后,新进程可以直接执行原本正文段的其他内容,但更多时候,我们在一个进程中调用fork创建新的进程后,希望新进程能…

在pycharm中设置后直接运行js代码

环境: pycharm专业版2020.3.2 已经安装nodejs和npm,并已经加入环境变量。 nodejs的安装参考在pycharm中运行js文件以及附加node.js下载步骤_python_脚本之家 下面开始在pycharm中设置,让其可以直接运行js代码,即需要安装一个叫…

C# 字符与字符串

本课要点: 1、字符类Char的使用 2、字符串类String的使用 3、可变字符串****StringBuilder 4、常见错误 一 何时用到字符与字符串 问题: 输出C#**课考试最高分:**98.5 输出最高分学生姓名:张三 输出最高分学生性别&#x…

六.应用层

目录 ​编辑 4.11 DHCP 6.1应用层的概述 6.2网络应用模型 CS P2P 6.3DNS 域名 www是什么,http是什么,到底什么区别? DNS出现及演化 DNS概括 DNS域名解析过程 6.4FTP FTP客户/服务器 FTP工作原理 FTP传输模式 6.5电子邮件 电…

King of Range 2024牛客国庆集训派对day3

原题 King of Range 解析 m 的值不大, 每次时间在 n logn 以内即可 我们遍历整个数组, 以 i 为右边界, 检测是否有满足条件的左边界, 一次只加上左面的所有可能, 用两个双向队列维护两个单调栈, 一个存最大值, 一个存最小值, 这样可以帮助找到合适的左边界 代码 #include …

JAVA并发编程系列(13)Future、FutureTask异步小王子

美团本地生活面试:模拟外卖订单处理,客户支付提交订单后,查询订单详情,后台需要查询店铺备餐进度、以及外卖员目前位置信息后再返回。 时间好快,一转眼不到一个月时间,已经完成分享synchronized、volatile、…

Linux应用——简易日志

1. 日志要求 对于一个日志来说,我们任认为其应该具有以下的内容 1. 日志时间 2. 日志等级 3. 日志内容 4. 文件名称与行号 在此基础上我们对不同的日志做出分级,即 info: 常规信息 warning: 报警信号 error: 严重信号,可能需要立…

UNIAPP 动态菜单实现方法

1. 封装tabbar组件,组件UI使用uview的tabbar allList 定义出全部的菜单 list 定义当前用户能看到的菜单使用 u-tabbar 渲染出来 list 2. 权限判断处理 3. 使用方式 在 tab 页,底部放入该 tab 组件,并设置当前回显的页面,这里使用…

STM32F407寄存器操作(DMA+I2C)

1.前言 因为后面需要用到大量基础通讯传输的问题,于是今天折腾了一下DMA传输I2C与SPI的效果,其实我先是把DMASPI搞出来了。但是考虑到网上对于STM32的I2C微词颇多,基础的协议都没有调试出来,更遑论DMA控制了,前面调不…

排序算法之——归并排序,计数排序

文章目录 前言一、归并排序1. 归并排序的思想2. 归并排序时间复杂度及空间复杂度3. 归并排序代码实现1)递归版本2)非递归版本 二、计数排序1. 计数排序的思想2. 计数排序的时间复杂度及空间复杂度3. 计数排序代码实现 总结(排序算法稳定性&am…

计算机毕业设计 基于Python的无人超市管理系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…