读书学习笔记 # Datawhale X 李宏毅苹果书 AI夏令营

news2024/12/23 13:52:48

文章目录

  • 🚩学习目标
  • 🚩学习内容
  • 🚩 Task1.1
  • 🚩 Task1.2
    • 🎯什么是批量和动量
      • 📌批量大小对梯度下降法的影响
        • 🎈批量梯度下降法(Batch Gradient Descent,BGD)
        • 🎈随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法
        • 🎈批量大小与计算时间的关系
    • 🎯什么是动量法
      • 📌对比一般的梯度下降法和动量法
        • 🎈动量法的主要优点
        • 🎈动量法也存在一些缺点。
  • 🚩Task 2.1
    • 🎯什么是自适应学习率

🚩学习目标

  • Task 1.1 《深度学习详解》- 3.1 局部极小值与鞍点
  • Task 1.2 《深度学习详解》- 3.2 批量和动量
  • Task 2.1 《深度学习详解》- 3.3&4&5 自适应学习率
  • Task 2.2 《深度学习详解》- 3.6 分类
  • Task 2.3 (实践任务):HW3(CNN)
  • Task 3.1 《深度学习详解》- 3.7 批量归一化
  • Task 3.2 《深度学习详解》- 4.1&2&3&4 卷积神经网络-上
  • Task 3.3 《深度学习详解》- 3.5&6&7&8 卷积神经网络-下
  • (选修)《深度学习详解》- 6.1&2 自注意力机制的原理
  • (选修实践任务):HW4(Attention)
  • (选修)《深度学习详解》19-ChatGPT

🚩学习内容

欢迎去大家各大电商平台选购纸质版苹果书《深度学习详解》
基于上述书籍拓展

引用内容为书本原话 图片基本上来源于书中
我以自问自答的方式输出内容


🚩 Task1.1


🎯为什么优化会失败

收敛在局部极限值与鞍点会导致优化失败。

隐藏任务①:搜索资料,找到一个优化失败的案例,尝试用自己的话描述一遍情况~
深度学习并非万能,遇到这些问题会失败 | 机器之心

📌因非信息梯度导致的失败

原因:如果梯度中的信息很少,使用它来进行学习就无法成功。
例如,研究者从学习随机奇偶校验的简单问题开始,在大约d=30这个程度之后,经过合理时间后也没有观察到优于随机的表现。
研究者使用两个定理对此进行了详细的分析,得出了结论:基于梯度的方法确实不能学会随机奇偶校验和线性周期函数。 此外,不管我们使用哪一类预测算法,只要使用了基于梯度的方法来进行训练,这个结果都成立。

🎯局部极小值与鞍点

我们在做优化的时候经常会发现,随着参数不断更新,训练的损失不会再下降, 但是我们对这个损失仍然不满意。’

达到了临界点

🎯临界点及其种类

过去常见的一个猜想是我们优化到某个地方,这个地方参数对损失的微分为零,如图 3.1所示。图 3.1 中的两条曲线对应两个神经网络训练的过程。当参数对损失微分为零的时候,梯度下降就不能再更新参数了,训练就停下来了,损失不再下降了。

在这里插入图片描述

提到梯度为零的时候,大家最先想到的可能就是局部极小值(local minimum)
所以经常有人说,做深度学习时使用梯度下降会收敛在局部极小值,梯度下降不起作用。 但其实损失不是只在局部极小值的梯度是零,还有其他可能会让梯度是零的点,比如鞍点(saddle point)鞍点其实就是梯度是零且区别于局部极小值和局部极大值(localmaximum)的点。图 3.2b 红色的点在 y 轴方向是比较高的,在 x 轴方向是比较低的,这就是一个鞍点。鞍点的叫法是因为其形状像马鞍。 鞍点的梯度为零,但它不是局部极小值。 我们把梯度为零的点统称为临界点(critical point)。 损失没有办法再下降,也许是因为收敛在了临界点,但不一定收敛在局部极小值,因为鞍点也是梯度为零的点。
在这里插入图片描述
局部较小值点和鞍点都会使得梯度为零,所以梯度为零的点,临界点不一定是局部极小值。

🎯如何判断临界值种类

判断一个临界点到底是局部极小值还是鞍点需要知道损失函数的形状。
虽然无法完整知道整个损失函数的样子,但是如果给定某一组参数,比如 θ ′ θ^{'} θ θ ′ θ^{'} θ 附近的 L ( θ ) L(θ) L(θ) 可近似为

L ( θ ) ≈ L ( θ ′ ) + ( θ − θ ′ ) T ∗ g + 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) . ( 3.1 ) L(θ) ≈ L(θ^{'})+(θ − θ^{′})^T*g +\frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) . (3.1) L(θ)L(θ)+(θθ)Tg+21(θθ)TH(θθ).(3.1)

式 (3.1) 是泰勒级数近似(Tayler series appoximation)。 其中,第一项 L ( θ ) L(θ) L(θ)′ 告诉我们,当 θ 跟 θ ′ θ^{′} θ很近的时候, L ( θ ) L(θ) L(θ) 应该跟还蛮靠近的;第二项 ( θ − θ ′ ) T ∗ g (θ − θ^{′})^T*g (θθ)Tg中,g 代表梯度,它是一个向量,可以弥补 L ( θ ′ ) L(θ^{′}) L(θ) L ( θ ) L(θ) L(θ) 之间的差距。有时候梯度 g 会写成 ∇ L ( θ ′ ) ∇L(θ^{′}) L(θ) g i g_i gi是向量 g 的第 i 个元素,就是 L 关于 θ 的第 i 个元素的微分,即
g i = ∂ L ( θ ′ ) ∂ θ i . ( 3.2 ) g_i =\frac{∂L(θ^{′})}{∂θ_i}.(3.2) gi=θiL(θ).(3.2)

光看 g 还是没有办法完整地描述 ,还要看式 (3.1) 的第三项 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) \frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) 21(θθ)TH(θθ)。第三项跟海森矩阵(Hessian matrix)H 有关
H 里面放的是 L 的二次微分,它第 i 行,第 j 列的值 H i j H_{ij} Hij 就是把 θ 的第 i 个元素对 L ( θ ′ ) L(θ^{′}) L(θ)作微分,再把 θ 的第 j 个元素对 ∂ L ( θ ′ ) ∂ θ i \frac{∂L(θ^{′})}{∂θ_i} θiL(θ)作微分后的结果,即

H i j = ∂ 2 L ( θ ′ ) ∂ θ i ∂ θ j . ( 3.3 ) H_{ij} =\frac{∂^2L(θ^{′})}{∂θ_i∂θ_j}. (3.3) Hij=θiθj2L(θ).(3.3)

在临界点,梯度 g 为零,因此 θ − θ′Tg 为零。所以在临界点的附近,损失函数可被近似为
L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) . ( 3.1 ) L(θ) ≈ L(θ^{'}) +\frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) . (3.1) L(θ)L(θ)+21(θθ)TH(θθ).(3.1)

我们可以根据 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) \frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) 21(θθ)TH(θθ)来判断在 θ ′ θ^{′} θ附近的误差表面(error surface) 到底长什么样子。
知道误差表面的“地貌”,我们就可以判断 L(θ′) 是局部极小值、局部极大值,还是鞍点。

上述我们通过一系列的转化把损失函数近似的写了出来,可以根据误差表面来判断临界点。

我们用向量 v 来表示 θ − θ ′ , ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) θ − θ^{′} ,(θ − θ^{′})^T * H(θ − θ^{′}) θθ,(θθ)TH(θθ)可改写为 v T H v v^TH_v vTHv,有如下三种情况。

  1. 如果对所有 v, v T H v > 0 v^TH_v> 0 vTHv>0 . 这意味着对任意 θ,L(θ) > L(θ′). 只要 θ 在 θ′ 附近,L(θ) 都大于 L(θ′). 这代表 L(θ′) 是附近的一个最低点,所以它是局部极小值。
  2. 如果对所有 v, v T H v < 0 v^TH_v< 0 vTHv<0 . 这意味着对任意 θ,L(θ) < L(θ′),θ′ 是附近最高的一个点,L(θ′) 是局部极大值。
  3. 如果对于 v, v T H v v^TH_v vTHv 有时候大于零,有时候小于零。 这意味着在 θ′ 附近,有时候L(θ) > L(θ′),有时候 L(θ) < L(θ′). 因此在 θ′ 附近,L(θ′) 既不是局部极大值,也不是局部极小值,而 是鞍点。

📌更简便的方法来判断 v T H v v^TH_v vTHv 的正负。

只要看 H的特征值。

  1. 若 H 的所有特征值都是正的H 为正定矩阵,则 v T H v v^TH_v vTHv > 0,临界点是局部极小值
  2. 若 H 的所有特征值都是负的H 为负定矩阵,则 v T H v v^TH_v vTHv < 0,临界点是局部极大值
  3. 若 H 的特征值有正有负,临界点是鞍点
    在这里插入图片描述

🎯H 怎么告诉我们怎么更新参数呢?

设 λ 为 H 的一个特征值 λ,u 为其对应的特征向量。对于我们的优化问题,可令 u = θ − θ ′ u =θ − θ^{′} u=θθ,则

u T H u = u T ( λ u ) = λ ∥ u ∥ 2 . u^{T}Hu = uT(λu) = λ∥u∥^{2}. uTHu=uT(λu)=λu2.

若 λ < 0,则 λ ∥ u ∥ 2 λ∥u∥^{2} λu2 < 0。所以 1 2 ( θ − θ ′ ) T ∗ H ( θ − θ ′ ) \frac{1}{2}(θ − θ^{′})^T * H(θ − θ^{′}) 21(θθ)TH(θθ) < 0。此时,L(θ) < L(θ′),且沿着 u 的方向更新 θ,损失就会变小。

只要 θ = θ′ + u,沿着特征向量 u 的方向去更新参数,损失就会变小,所以虽然临界点的梯度为零,如果我们是在一个鞍点,只要找出负的特征值,再找出这个特征值对应的特征向量。将其与 θ′ 相加,就可以找到一个损失更低的点。
我们其实只要顺着 u 的方向去更新参数,就可以找到一个比鞍点的损失还要更低的点。

🎯如何逃离鞍点

我们常常会遇到两种情况:损失仍然很高,却遇到了临界点而不再下降;或者损失降得很低,才遇到临界点。

在这里插入图片描述

在图 3.6 所示的例子中,最小值比例(=正特征值数量/总特征值数量)最大也不过处于 0.5 ~ 0.6 的范围,代表只有约一半的特征值为正,另一半的特征值为负,代表在所有的维度里面有约一半的路可以让损失上升,还有约一半的路可以让损失下降。

在这里插入图片描述

所以从经验上看起来,局部极小值并没有那么常见。 多数的时候,我们训练到一个梯度很小的地方,参数不再更新,往往只是遇到了鞍点。

🚩 Task1.2

🎯什么是批量和动量

实际计算梯度的过程中,我们将数据分成多个批次(batch),每个批次大小为B,即包含B个数据样本。

每次更新参数时,从批次中选取数据计算损失和梯度,并更新参数。完成一次遍历所有批次的过程称为一个回合(epoch)。

为了增加样本的随机性,我们会在划分批次时进行随机打乱(shuffle)。常见的一种做法是在每个回合开始之前重新划分批次,使得每个回合的批次数据都不同。

在这里插入图片描述

📌批量大小对梯度下降法的影响

在这里插入图片描述

🎈批量梯度下降法(Batch Gradient Descent,BGD)

使用全批量(fullbatch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD)。
此时模型必须把 20 笔训练数据都看完,才能够计算损失和梯度,参数才能够更新一次。

🎈随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法

批量大小等于 1,此时使用的方法即随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法。
批量大小等于 1 意味着只要取出一笔数据即可计算损失、更新一次参数。
如果总共有 20 笔数据,那么在每一个回合里面,参数会更新 20 次。
用一笔数据算出来的损失相对带有更多噪声,因此其更新的方向如图 3.8 所示,是曲曲折折的 。

🎈批量大小与计算时间的关系

在这里插入图片描述

当批量大小增加到10000,甚至增加到 60000 的时候,GPU 计算梯度并更新参数所耗费的时间确实随着批量大小的增加而逐渐增长。

大的批量更新比较稳定,小的批量的梯度的方向是比较有噪声的(noisy)。

在这里插入图片描述

同一个模型,大的批量大小往往在训练的时候,结果比较差。 这个是优化的问题,大的批量大小优化可能会有问题,小的批量大小优化的结果反而是比较好的。

在这里插入图片描述

一个可能的解释如图 3.12 所示,批量梯度下降在更新参数的时候,沿着一个损失函数来更新参数,走到一个局部最小值或鞍点显然就停下来了。
梯度是零,如果不看海森矩阵,梯度下降就无法再更新参数了 。
但小批量梯度下降法(mini-batch gradient descent)每次是挑一个批量计算损失,所以每一次更新参数的时候所使用的损失函数是有差异的。
这种有噪声的更新方式反而对训练其实是有帮助的。其实小的批量也对测试有帮助。

在模型训练的适合小批量梯度下降法的噪声反而使得梯度不容易落在临界点,而且更方便测试。

大的批量跟小的批量的训练准确率(accuracy) 差不多,但就算是在训练的时候结果差不多,测试的时候,大的批量比小的批量差,代表过拟合。

在这里插入图片描述

大的批量大小会让我们倾向于走到“峡谷”里面,而小的批量大小倾向于让我们走到“盆地”里面。 小的批量有很多的损失,其更新方向比较随机,其每次更新的方向都不太一样。即使“峡谷”非常窄,它也可以跳出去,之后如果有一个非常宽的“盆地”,它才会停下来。

在这里插入图片描述

而小的批量更新的方向比较有噪声的,大的批量更新的方向比较稳定。但是有噪声的更新方向反而在优化的时候有优势,而且在测试的时候也会有优势。
所以大的批量跟小的批量各有优缺点,批量大小是需要去调整的超参数。

🎯什么是动量法

动量法(momentum method)是另外一个可以对抗鞍点或局部最小值的方法。

在这里插入图片描述

但是在物理的世界里,一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。因此在物理的世界里面,一个球从高处滚下来的时候,它并不一定会被鞍点或局部最小值卡住,如果将其应用到梯度下降中,这就是动量。

📌对比一般的梯度下降法和动量法

在这里插入图片描述

在这里插入图片描述

引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向。

图 3.16 中红色虚线方向是梯度的反方向,蓝色虚线方向是前一次更新的方向,蓝色实线的方向是下一步要移动的方向。 把前一步指示的方向跟梯度指示的方向相加就是下一步的移动方向。

动量法引入了动量的概念,通过累积之前的梯度信息来加速学习过程。动量法在更新参数时不仅考虑当前的梯度,还考虑了之前累积的梯度。

🎈动量法的主要优点

可以加速收敛速度,特别是在目标函数存在高度非均向性的情况下。
可以帮助跳出局部最小值,并具有一定的平滑效果。

🎈动量法也存在一些缺点。

动量法引入了额外的超参数,需要人工调整。
如果动量系数设置过大,可能会导致震荡;如果设置过小,则可能会导致收敛速度变慢。

在这里插入图片描述

动量的简单例子如图 3.17 所示。红色表示负梯度方向,蓝色虚线表示前一步的方向,蓝色实线表示真实的移动量。 一开始没有前一次更新的方向,完全按照梯度给指示往右移动参数。负梯度方向跟前一步移动的方向加起来,得到往右走的方向。一般梯度下降走到一个局部最小值或鞍点时,就被困住了。但有动量还是有办法继续走下去,因为动量不是只看梯度,还看前一步的方向。即使梯度方向往左走,但如果前一步的影响力比梯度要大,球还是有可能继续往右走,甚至翻过一个小丘,也许可以走到更好的局部最小值,这就是动量有可能带来的好处 。

🚩Task 2.1

🎯什么是自适应学习率

临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。

在这里插入图片描述

图 3.18中的横坐标代表参数更新的次数,竖坐标表示损失

一般在训练一个网络的时候,损失原来很大,随着参数不断的更新,损失会越来越小,最后就卡住了,损失不再下降。

在这里插入图片描述

我们走到临界点的时候,意味着梯度非常小,但损失不再下降的时候,梯度并没有真的变得很小,图 3.19 给出了示例。

图 3.19 中横轴是迭代次数,竖轴是梯度的范数(norm),即梯度这个向量的长度。
随着迭代次数增多,虽然损失不再下降,但是梯度的范数并没有真的变得很小。

在这里插入图片描述

图 3.20是误差表面,梯度在山谷的两个谷壁间,不断地来回“震荡”,这个时候损失不会再下降,它不是真的卡到了临界点,卡到了鞍点或局部最小值
在局部最小值或鞍点,只是单纯的损失无法再下降。
但它的梯度仍然很大,只是损失不一定再减小了

我们可以试着把学习率设小一点

在这里插入图片描述

调学习率从 10−2 调到 10−7 的结果如图 3.22(b)所示,参数不再“震荡”了。参数会滑到山谷底后左转,但是这个训练永远走不到终点,因为学习率已经太小了。

AB段的坡度很陡,梯度的值很大,还能够前进一点。左拐以后,BC 段的坡度已经非常平坦了,这种小的学习率无法再让训练前进。
事实上在 BC 段有 10 万个点(10 万次更新),但都无法靠近局部最小值,所以显然就算是一个凸的误差表面,梯度下降也很难训练。

在梯度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自适应学习率(adaptive learning rate) 的方法,给每一个参数不同的学习率。

待续

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

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

相关文章

ubuntu环境下部署LNMP集成环境超详细图文教程

ubuntu系统下安装LNMP集成环境 一、Nginx安装 二、安装及配置MySQL数据库 修改密码 三、安装PHP 四、配置Nginx服务 ​编辑五、配置PHP 本文使用的Ubuntu版本为20.04。 php开发中集成环境的安装是必不可少的技能。 而LNMP代表的是&#xff1a;Linux系统下NginxMySQLPHP…

李沐--动手学深度学习 ResNet

1.理论 2.残差块 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l#ResNet沿用了VGG完整的3*3卷积层设计.残差块的实现如下&#xff1a; #此代码生成两种类型的网络&#xff1a; #一种是当use_1x1convFalse时&#xff0…

96.SAP MII功能详解(09)Workbench-Transaction Debugging

目录 1.About Transaction Debugging Use Features Activities 2.How to Debug Start Debugging Create Breakpoint Watch Variables Debugging logs 1.About Transaction Debugging Use You use this function to monitor and manipulate a transaction while it …

java框架第一课(mybatis认识)

一.关于mybatis 1.mybatis的背景 mybatis原来 是Apache的一个开源项目iBatis,2010年6月这个项目由ApacheSoftware Foundation 迁移到了 Google Code&#xff0c;并改名为mybatis。 2.mybitis的介绍 (1)MyBatis 是一款优秀的持久层框架(在与数据库交互,数据访问层,数据持久层)。…

深入学习SQL优化的第四天

目录 高级查询与连接 1731 每 位 经 理 的 下 属 员 工 数 量 1789 员 工 的 直 属 部 门 610 判 断 三 角 形 180 连 续 出 现 的 数 字 1164 指 定 日 期 的 产 品 价 格 1204 最 后 一 个 能 进 入 巴 士 的 人 1907 按 分 类 统 计 薪 水 子查询 1978 上…

机器学习入门(Datawhale X 李宏毅苹果书 AI夏令营-Task1)

&#x1f4dd;本文介绍 本文为作者初探机器学习&#xff0c;读苹果书写下的笔记。 &#x1f44b;作者简介&#xff1a;一个正在积极探索的本科生 &#x1f4f1;联系方式&#xff1a;943641266(QQ) &#x1f6aa;Github地址&#xff1a;https://github.com/sankexilianhua &…

AcWing854. Floyd求最短路

注意&#xff1a;Floyd是求图里面任意两个点x&#xff0c;y之间的最短距离 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 210, INF 1e9;int n, m, Q; int d[N][N];void floyd() { //枚举1~k个中间节点&a…

书生.浦江大模型实战训练营——(十三)茴香豆:企业级知识库问答工具

最近在学习书生.浦江大模型实战训练营&#xff0c;所有课程都免费&#xff0c;以关卡的形式学习&#xff0c;也比较有意思&#xff0c;提供免费的算力实战&#xff0c;真的很不错&#xff08;无广&#xff09;&#xff01;欢迎大家一起学习&#xff0c;打开LLM探索大门&#xf…

国货之光|暴雨信创服务器亮相北京科博会

8月13-16日&#xff0c;由北京市人民政府主办的第二十六届中国北京国际科技产业博览会&#xff08;简称北京科博会&#xff09;在北京国际会议中心成功举办。作为汇聚全球科技创新成果与智慧交流的高端盛会&#xff0c;北京科博会是推动创新发展成果展示的重要舞台。 青海科技展…

html2canvas ios慎用和createImageBitmap ios慎用

好好好&#xff0c;排查几天&#xff0c;原来是你 小本本记下了[翻白眼][翻白眼][翻白眼] ​html2canvas ios慎用&#xff0c;用了记得设置字体 ​2. createImageBitmap ios慎用&#xff0c;14及以下不兼容&#xff0c;建议更换api

Vue3基础2

1.Hooks 就是进行数据的封装&#xff0c;同一种类型的 数据 方法 计算属性 &#xff0c;放在一起 命名规范 use功能名称.ts 或.js 创建一个文件夹 hooks 1.useDog.ts import { reactive,onMounted } from "vue"; import axios from "axios";export def…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

Linux命令:创建新的目录的工具mkdir命令详解

目录 一、概述 二、语法 1、基本语法 2、常用选项 3、获取帮助 三、示例 1. 创建单个目录 2. 创建多个目录 3. 使用 -p 选项创建多级目录 4. 设置目录权限 5. 显示创建目录的信息 &#xff08;1&#xff09;一般目录创建 &#xff08;2&#xff09;复杂目录创建 …

大数据技术之Flume 企业开发案例——负载均衡和故障转移(6)

目录 负载均衡和故障转移 1&#xff09;案例需求 2&#xff09;需求分析 3&#xff09;实现步骤 负载均衡和故障转移 1&#xff09;案例需求 使用 Flume1 监控一个端口&#xff0c;其 sink 组中的 sink 分别对接 Flume2 和 Flume3&#xff0c;采用 FailoverSinkProcessor…

裁员后的逆袭:程序员变外卖小哥,AI绘画成就全新职业生涯

一、初代程序员的困境 曾几何时&#xff0c;我是一名初代程序员&#xff0c;投身于互联网行业&#xff0c;为我国信息化建设贡献自己的力量。然而&#xff0c;随着年龄的增长和行业竞争的加剧&#xff0c;我不可避免地遭遇了裁员。面对突如其来的变故&#xff0c;我不得不重新审…

Nginx反向代理B

http协议反向代理 反向代理配置参数 proxy_pass; #用来设置将客户端请求转发给的后端服务器的主机 #可以是主机名(将转发至后端服务做为主机头首部)、IP地址&#xff1a;端口的方式 #也可以代理到预先设置的主机群组&#xff0c;需要模块ngx_http_upstream_module支持 #示例:…

机械学习—零基础学习日志(如何理解概率论9)

大数定律与中心定律 来看一道习题&#xff1a; 这个题目看看&#xff0c;应该是什么呢~下一章来看看解析~ 《概率论与数理统计期末不挂科|考研零基础入门4小时完整版&#xff08;王志超&#xff09;》学习笔记 王志超老师 &#xff08;UP主&#xff09;

构造,CF 1290B - Irreducible Anagrams

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1290B - Irreducible Anagrams 二、解题报告 1、思路分析 首先根据样例特…

系统编程-消息队列

消息队列 目录 消息队列 引入 一、消息队列的特点 二、使用指令查看消息队列 三、使用消息队列进行通信的步骤 1、获取键值 2、创建或获取消息队列 id 3、使用消息队列进行数据的传输 4、msgrcv -- 从消息队列中读取数据 5、消息队列的多种操作函数 引入 -- 进程间…

一、undo log、Buffer Pool、WAL、redo log

目录 1、undo log2、Buffer Pool3、WAL4、redo log5、总结6、问题 1、undo log undo log日志是一种用于撤销回退的逻辑日志&#xff0c;在事务未提交前会记录相反的操作到undo log&#xff0c;当事务回滚&#xff0c;使用undo log 进行回滚&#xff0c;保证了事务的原子性。MV…