线性代数|机器学习-P22逐步最小化一个函数

文章目录

  • 1. 概述
  • 2. 泰勒公式
  • 3. 雅可比矩阵
  • 4. 经典牛顿法
    • 4.1 经典牛顿法理论
    • 4.2 牛顿迭代法解求方程根
    • 4.3 牛顿迭代法解求方程根 Python
  • 5. 梯度下降和经典牛顿法
    • 5.1 线搜索方法
    • 5.2 经典牛顿法
  • 6. 凸优化问题
    • 6.1 约束问题
    • 6.1 凸集组合

Mit麻省理工教授视频如下:逐步最小化一个函数

1. 概述

主要讲的是无约束情况下的最小值问题。涉及到如下:

  • 矩阵求导
  • 泰勒公式,函数到向量的转换
  • 梯度下降
  • 牛顿法梯度下降

2. 泰勒公式

我们之前在高等数学中学过关于f(x)的泰勒展开如下:
定义: lim ⁡ x → a h k ( x ) = 0 \lim\limits_{x\to a}h_k(x)=0 xalimhk(x)=0
f ( x ) = f ( a ) + f ′ ( a ) ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + ⋯ + f ( k ) ( a ) k ! ( x − a ) k + h k ( x ) ( x − a ) k \begin{equation} f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2!}(x-a)^2+\cdots+\frac{f^{(k)}(a)}{k!}(x-a)^k+h_k(x)(x-a)^k \end{equation} f(x)=f(a)+f(a)(xa)+2!f′′(a)(xa)2++k!f(k)(a)(xa)k+hk(x)(xa)k

  • 那么我们只提取二次项, x + Δ x → x ; x → a x+\Delta x \rightarrow x;x\rightarrow a x+Δxx;xa 可得如下:
    f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x + f ′ ′ ( x ) 2 ! Δ x 2 \begin{equation} f(x+\Delta x)\approx f(x)+f'(x)\Delta x+\frac{f''(x)}{2!}\Delta x^2 \end{equation} f(x+Δx)f(x)+f(x)Δx+2!f′′(x)Δx2
  • 上面的公式中x为标量,现在我们需要用到向量 x
  • a , b a,b a,b均为1维列向量,S为对称矩阵时,我们可得得到如下:
    a T b = c , x T S x = d → c , d 均为标量 \begin{equation} a^Tb=c,x^TSx=d\rightarrow c,d均为标量 \end{equation} aTb=c,xTSx=dc,d均为标量
  • 定义如下:
    x = [ x 1 x 2 ⋯ x n ] T , f = [ f 1 f 2 ⋯ f n ] T \begin{equation} x=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}^T,f=\begin{bmatrix}f_1&f_2&\cdots&f_n\end{bmatrix}^T \end{equation} x=[x1x2xn]T,f=[f1f2fn]T
    f ′ ( x ) = ∇ F = [ ∂ f ∂ x 1 ∂ f ∂ x 1 ⋯ ∂ f ∂ x n ] T → f ′ ( x ) Δ x = ( Δ x ) T ∇ F ( x ) \begin{equation} f'(x)=\nabla F=\begin{bmatrix}\frac{\partial f}{\partial x_1}&\frac{\partial f}{\partial x_1}&\cdots&\frac{\partial f}{\partial x_n}\end{bmatrix}^T \rightarrow f'(x)\Delta x=(\Delta x)^T \nabla F(x) \end{equation} f(x)=F=[x1fx1fxnf]Tf(x)Δx=(Δx)TF(x)
  • H j k H_{jk} Hjkhessian matrix具有对称性
    f ′ ′ ( x ) = H j k = ∂ 2 F ∂ x j ⋅ ∂ x k → f ′ ′ ( x ) 2 ! Δ x 2 = 1 2 ( Δ x ) T H j k ( Δ x ) \begin{equation} f''(x)=H_{jk}=\frac{\partial^2F}{\partial x_j\cdot \partial x_k}\rightarrow \frac{f''(x)}{2!}\Delta x^2=\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x) \end{equation} f′′(x)=Hjk=xjxk2F2!f′′(x)Δx2=21(Δx)THjk(Δx)
  • 整理上述公式可得:
    F ( x + Δ x ) ≈ F ( x ) + ( Δ x ) T ∇ F ( x ) + 1 2 ( Δ x ) T H j k ( Δ x ) \begin{equation} F(x+\Delta x)\approx F(x)+(\Delta x)^T \nabla F(x)+\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x) \end{equation} F(x+Δx)F(x)+(Δx)TF(x)+21(Δx)THjk(Δx)

3. 雅可比矩阵

假设有一个m维度向量函数 f ( x ) = [ f 1 ( x ) f 2 ( x ) ⋯ f m ( x ) ] T f(x)=\begin{bmatrix}f_1(x)&f_2(x)&\cdots f_m(x)\end{bmatrix}^T f(x)=[f1(x)f2(x)fm(x)]T[列向量],其中
x = [ x 1 x 2 ⋯ x n ] T x=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}^T x=[x1x2xn]T是一个n维输入向量,雅可比矩阵J是一个 m × n m\times n m×n的矩阵,其元素由函数的偏导数组成:雅可比矩阵第i行第j列表示的是 f i ( x ) f_i(x) fi(x) x i x_i xi的偏导
J i j = ∂ f i ( x ) ∂ x j \begin{equation} J_{ij}=\frac{\partial f_i(x)}{\partial x_j} \end{equation} Jij=xjfi(x)

  • 本质上就是函数值 f i ( x ) f_i(x) fi(x) x i x_i xi的每个元素求导:

  • 第一步假设 f i ( x ) f_i(x) fi(x)是常数, ∂ f i ( x ) ∂ X \frac{\partial f_i(x)}{\partial X} Xfi(x)为分子布局,遵循标量不变,向量拉伸原则

  • XY拉伸术,分子布局,X横向拉,Y纵向拉,可得如下:
    ∂ f i ( x ) ∂ X = [ ∂ f i ( x ) ∂ x 1 ∂ f i ( x ) ∂ x 2 ⋯ ∂ f i ( x ) ∂ x n ] \begin{equation} \frac{\partial f_i(x)}{\partial X}= \begin{bmatrix} \frac{\partial f_i(x)}{\partial x_1}& \frac{\partial f_i(x)}{\partial x_2}& \cdots& \frac{\partial f_i(x)}{\partial x_n} \end{bmatrix} \end{equation} Xfi(x)=[x1fi(x)x2fi(x)xnfi(x)]

  • 第二步假设 f ( x ) f(x) f(x)为向量, ∂ f ( x ) ∂ X \frac{\partial f(x)}{\partial X} Xf(x)为分子布局,遵循标量不变,向量拉伸原则

  • XY拉伸术,分子布局,X横向拉,Y 纵向拉,可得如下:
    J = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ⋯ ∂ f 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 2 ⋯ ∂ f 2 ( x ) ∂ x n ⋮ ⋮ ⋯ ⋮ ∂ f m ( x ) ∂ x 1 ∂ f m ( x ) ∂ x 2 ⋯ ∂ f m ( x ) ∂ x n ] \begin{equation} \mathrm{J}= \begin{bmatrix} \frac{\partial f_1(x)}{\partial x_1}&\frac{\partial f_1(x)}{\partial x_2}&\cdots&\frac{\partial f_1(x)}{\partial x_n}\\\\ \frac{\partial f_2(x)}{\partial x_1}&\frac{\partial f_2(x)}{\partial x_2}&\cdots&\frac{\partial f_2(x)}{\partial x_n} \\\\ \vdots&\vdots&\cdots&\vdots\\\\\ \frac{\partial f_m(x)}{\partial x_1}&\frac{\partial f_m(x)}{\partial x_2}&\cdots& \frac{\partial f_m(x)}{\partial x_n} \end{bmatrix} \end{equation} J= x1f1(x)x1f2(x) x1fm(x)x2f1(x)x2f2(x)x2fm(x)xnf1(x)xnf2(x)xnfm(x)

  • 泰勒公式1阶展开可得:
    f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x \begin{equation} f(x+\Delta x)=f(x)+f'(x)\Delta x \end{equation} f(x+Δx)=f(x)+f(x)Δx

  • 转换成雅可比矩阵可得:
    f ( x + Δ x ) = f ( x ) + J j k Δ x ; J j k = ∂ f j ( x ) ∂ x k \begin{equation} f(x+\Delta x)=f(x)+\mathrm{J}_{jk}\Delta x;\mathrm{J}_{jk}=\frac{\partial f_j(x)}{\partial x_k} \end{equation} f(x+Δx)=f(x)+JjkΔx;Jjk=xkfj(x)

4. 经典牛顿法

4.1 经典牛顿法理论

我们已经知道了函数的二阶泰勒展开表示如下:
F ( x + Δ x ) ≈ F ( x ) + ( Δ x ) T ∇ F ( x ) + 1 2 ( Δ x ) T H j k ( Δ x ) \begin{equation} F(x+\Delta x)\approx F(x)+(\Delta x)^T \nabla F(x)+\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x) \end{equation} F(x+Δx)F(x)+(Δx)TF(x)+21(Δx)THjk(Δx)

  • 一般如果在 x ∗ x^* x处取得最小值,那么其导数为0;现在我们求导可得:
    d F ( x ) d Δ x = 0 ; ( Δ x ) T ∇ F ( x ) d Δ x = ∇ F ( x ) ; d 1 2 ( Δ x ) T H j k ( Δ x ) d Δ x = H j k Δ x ; \begin{equation} \frac{\mathrm{d}F(x)}{\mathrm{d}\Delta x}=0;\frac{(\Delta x)^T \nabla F(x)}{\mathrm{d}\Delta x}=\nabla F(x);\frac{\mathrm{d}\frac{1}{2}(\Delta x)^T H_{jk}(\Delta x)}{\mathrm{d}\Delta x}=H_{jk}\Delta x; \end{equation} dΔxdF(x)=0;dΔx(Δx)TF(x)=F(x);dΔxd21(Δx)THjk(Δx)=HjkΔx;
    d F ( x + Δ x ) d Δ x = 0 + ∇ F ( x ) + H j k Δ x = 0 \begin{equation} \frac{\mathrm{d}F(x+\Delta x)}{\mathrm{d}\Delta x}=0+\nabla F(x)+H_{jk}\Delta x=0 \end{equation} dΔxdF(x+Δx)=0+F(x)+HjkΔx=0
  • H j k = J j k H_{jk}=\mathrm{J}_{jk} Hjk=Jjk可逆时, Δ x = x k + 1 − x k \Delta x=x_{k+1}-x_k Δx=xk+1xk可得:
    − [ H j k ] − 1 ∇ F ( x ) = x k + 1 − x k → x k + 1 = x k − [ J j k ] − 1 ∇ F ( x ) \begin{equation} -[H_{jk}]^{-1}\nabla F(x)=x_{k+1}-x_k\rightarrow x_{k+1}=x_k-[\mathrm{J}_{jk}]^{-1}\nabla F(x) \end{equation} [Hjk]1F(x)=xk+1xkxk+1=xk[Jjk]1F(x)
  • 我们定义 ∇ F ( x ) = f ( x k ) \nabla F(x)=f(x_k) F(x)=f(xk), J j k = J x k \mathrm{J}_{jk}=\mathrm{J}_{x_k} Jjk=Jxk
    x k + 1 = x k − [ J x k ] − 1 f ( x k ) \begin{equation} x_{k+1}=x_k-[\mathrm{J}_{x_k}]^{-1}f(x_k) \end{equation} xk+1=xk[Jxk]1f(xk)

4.2 牛顿迭代法解求方程根

  • 已知: f ( x ) = x 2 − 9 = 0 f(x)=x^2-9=0 f(x)=x29=0,用牛顿迭代的方法求解方程的根
  • 根据迭代公式可得: f ′ ( x ) = J x k = 2 x , f ( x k ) = x k 2 − 9 f'(x)=\mathrm{J}_{x_k}=2x,f(x_k)=x_k^2-9 f(x)=Jxk=2x,f(xk)=xk29
    x k + 1 = x k − [ J x k ] − 1 f ( x k ) → x k + 1 = x k − f ( x k ) J x k \begin{equation} x_{k+1}=x_k-[\mathrm{J}_{x_k}]^{-1}f(x_k)\rightarrow x_{k+1}=x_k-\frac{f(x_k)}{\mathrm{J}_{x_k}} \end{equation} xk+1=xk[Jxk]1f(xk)xk+1=xkJxkf(xk)
  • 整理可得:
    x k + 1 = x k − x k 2 − 9 2 x k = 1 2 x k + 9 2 x k \begin{equation} x_{k+1}=x_k-\frac{x_k^2-9}{2x_k}=\frac{1}{2}x_k+\frac{9}{2x_k} \end{equation} xk+1=xk2xkxk29=21xk+2xk9
  • 收敛依据:
    判断新的近似值 x k + 1 x_{k+1} xk+1与当前值 x k x_k xk之间的差距是否小于某个值 ϵ = 1 0 − 10 \epsilon=10^{-10} ϵ=1010,如果小于该值则认为收敛,否则继续迭代。
  • 我们先设置初始值 x 0 = 2 x_0=2 x0=2可得 x 1 x_1 x1
    x 1 = 1 2 x 0 + 9 2 x 0 = 3.25 ; \begin{equation} x_{1}=\frac{1}{2}x_0+\frac{9}{2x_0}=3.25; \end{equation} x1=21x0+2x09=3.25;
  • 继续迭代得 x 2 x_2 x2
    x 2 = 1 2 x 1 + 9 2 x 1 = 3.0096153846153846 ; \begin{equation} x_{2}=\frac{1}{2}x_1+\frac{9}{2x_1}=3.0096153846153846; \end{equation} x2=21x1+2x19=3.0096153846153846;
  • 继续迭代得 x 3 x_3 x3
    x 3 = 1 2 x 2 + 9 2 x 2 = 3.000015360039322 ; \begin{equation} x_{3}=\frac{1}{2}x_2+\frac{9}{2x_2}=3.000015360039322; \end{equation} x3=21x2+2x29=3.000015360039322
  • 继续迭代得 x 4 x_4 x4
    x 4 = 1 2 x 3 + 9 2 x 3 = 3.0000000000393214 ; \begin{equation} x_{4}=\frac{1}{2}x_3+\frac{9}{2x_3}=3.0000000000393214; \end{equation} x4=21x3+2x39=3.0000000000393214
  • 可得 x 2 − 9 = 0 x^2-9=0 x29=0的解为 x 1 ∗ = 3 x_1^*=3 x1=3,同理初始化为 x 0 = − 2 x_0=-2 x0=2 可得 x 2 ∗ = − 3 x_2^*=-3 x2=3

4.3 牛顿迭代法解求方程根 Python

  • 代码: Python代码如下:
def newton_raphson(f, f_prime, x0, tol=1e-10, max_iter=100):x = x0for i in range(max_iter):fx = f(x)fpx = f_prime(x)# Newton-Raphson iterationx_new = x - fx / fpxprint(f"Iteration {i + 1}: x = {x_new}")if abs(x_new - x) < tol:return x_newx = x_newraise ValueError("Newton-Raphson method did not converge")# Define the function and its first derivative
f = lambda x: x ** 2 - 9
f_prime = lambda x: 2 * x# Initial guesses
initial_guesses = [2, -2]# Find the roots
for x0 in initial_guesses:root = newton_raphson(f, f_prime, x0)print(f"The root starting from {x0} is: {root}")
  • 运行结果:
Iteration 1: x = 3.25
Iteration 2: x = 3.0096153846153846
Iteration 3: x = 3.000015360039322
Iteration 4: x = 3.0000000000393214
Iteration 5: x = 3.0
The root starting from 2 is: 3.0
Iteration 1: x = -3.25
Iteration 2: x = -3.0096153846153846
Iteration 3: x = -3.000015360039322
Iteration 4: x = -3.0000000000393214
Iteration 5: x = -3.0
The root starting from -2 is: -3.0

5. 梯度下降和经典牛顿法

对于无约束问题的梯度下降,我们一般有两种方法:

5.1 线搜索方法

运用泰勒一阶信息,迭代方向为负梯度方向:

  • 迭代方程:
    x k + 1 = x k + α k p k \begin{equation} x_{k+1}=x_k +\alpha_k p_k \end{equation} xk+1=xk+αkpk
  • 方向 p k p_k pk:负梯度方向 − ∇ F -\nabla F F
  • 步长: α k = s k \alpha_k=s_k αk=sk,深度学习中叫学习率
  • 更新后的方程如下:
    x k + 1 = x k − s k ∇ F \begin{equation} x_{k+1}=x_k -s_k \nabla F \end{equation} xk+1=xkskF

5.2 经典牛顿法

运用泰勒二阶信息,迭代方向为牛顿方向:迭代步长为 α 1 = 1 \alpha_1=1 α1=1

  • 迭代方程为,hessian matrix-> H j k H_{jk} Hjk可逆:
    x k + 1 = x k − [ H j k ] − 1 ∇ F ( x ) \begin{equation} x_{k+1}=x_k-[H_{jk}]^{-1}\nabla F(x) \end{equation} xk+1=xk[Hjk]1F(x)
  • 经典牛顿法为二次性收敛,速度非常快,具体分析请参考如下博客
    [优化算法]经典牛顿法

6. 凸优化问题

6.1 约束问题

我们定义凸函数为 f ( x ) f(x) f(x),凸集为 K \mathrm{K} K,我们的目的是为了求得凸函数 f ( x ) f(x) f(x)的最小值
min ⁡ x ∈ K f ( x ) , K : A x = b \begin{equation} \min\limits_{x\in K} f(x), \mathrm{K}:Ax=b \end{equation} xKminf(x)K:Ax=b

  • f ( x ) f(x) f(x)表示的是所有在碗内部上的和碗内表面上的点
  • 求的是在碗内表面的上的最小值,碗的形状就是约束条件 A x = b Ax=b Ax=b
    在这里插入图片描述

6.1 凸集组合

  • 如果 x 1 , x 2 x_1,x_2 x1,x2均在凸集里面,则由 x 1 , x 2 x_1,x_2 x1,x2组成的直线L在凸集里面
    在这里插入图片描述
  • 如果 x 1 , x 2 x_1,x_2 x1,x2分别在不同的凸集里面,则由 x 1 , x 2 x_1,x_2 x1,x2组成的直线L不在凸集里面
    在这里插入图片描述
  • 小结:合并图集里面组合的直线不在凸集里面。
  • 如果 x 1 , x 2 x_1,x_2 x1,x2都在不同的凸集里面的交集里面,则由 x 1 , x 2 x_1,x_2 x1,x2组成的直线L在凸集中
    在这里插入图片描述
  • 假设我们有两个凸函数 F 1 ( x ) , F 2 ( x ) F_1(x),F_2(x) F1(x),F2(x),我们定义如下:
    min ⁡ ( x ) = min ⁡ [ F 1 ( x ) , F 2 ( x ) ] ; max ⁡ ( x ) = max ⁡ [ F 1 ( x ) , F 2 ( x ) ] ; \begin{equation} \min(x)=\min[F_1(x),F_2(x)];\max(x)=\max[F_1(x),F_2(x)]; \end{equation} min(x)=min[F1(x),F2(x)];max(x)=max[F1(x),F2(x)];
  • 如果两个凸集相交,那么相交的凸集最大值,最小值如下:
    min ⁡ ( x ) = min ⁡ [ F 1 ( x ) , F 2 ( x ) ] − > 非凸; max ⁡ ( x ) = max ⁡ [ F 1 ( x ) , F 2 ( x ) ] − > 凸 ; \begin{equation} \min(x)=\min[F_1(x),F_2(x)]-> 非凸;\max(x)=\max[F_1(x),F_2(x)]->凸; \end{equation} min(x)=min[F1(x),F2(x)]>非凸;max(x)=max[F1(x),F2(x)]>;
  • 凸函数判断
    d 2 f ( x ) d x 2 ≥ 0 \begin{equation} \frac{\mathrm{d}^2f(x)}{\mathrm{d}x^2}\ge 0 \end{equation} dx2d2f(x)0

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

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

相关文章

SpringBoot使用RedisTemplate、StringRedisTemplate操作Redis

前言 RedisTemplate 是 Spring Boot 访问 Redis 的核心组件&#xff0c;底层通过 RedisConnectionFactory 对多种 Redis 驱动进行集成&#xff0c;上层通过 XXXOperations 提供丰富的 API &#xff0c;并结合 Spring4 基于泛型的 bean 注入&#xff0c;极大的提供了便利&#x…

深度学习和NLP中的注意力和记忆

深度学习和NLP中的注意力和记忆 文章目录 一、说明二、注意力解决了什么问题&#xff1f;#三、关注的代价#四、机器翻译之外的关注#五、注意力&#xff08;模糊&#xff09;记忆&#xff1f;# 一、说明 深度学习的最新趋势是注意力机制。在一次采访中&#xff0c;现任 OpenAI 研…

K8S中部署 Nacos 集群

1. 准备 GitK8Skubectlhelm 咱也没想到 K8S 部署系列能搞这么多次&#xff0c;我一个开发天天干运维的活&#xff0c;前端后端运维测试工程师实至名归。 2. 方案选择 https://github.com/nacos-group/nacos-k8s 我替你们看了一下&#xff0c;有好几种方式能部署&#xff…

【RHCE】基于用户认证和TLS加密的HTTP服务(HTTPS)

目录 一、创建用户账号 二、TLS加密 三、配置http服务子配置文件 四、创建访问http服务的文件夹以及输入重定向到文件 五、配置Linux本地仓库以及Windows下的本地仓库 六、基础操作 七、测试 一、创建用户账号 用户认证 # 创建两个账户 [rootlocalhost ~]# htpasswd -…

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…

可控学习综述:信息检索中的方法、应用和挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

js逆向第24例:FastMoss数据分析网站Fm-Sign加密字段破解

文章目录 一、前言二、定位关键参数三、代码实现一、前言 破解:FastMoss数据分析网站Fm-Sign加密字段 二、定位关键参数 先看一下网站加密字段是长什么样,如下图,老手估计一下子就能发现字段Fm-Sign:的密文类似md5加密后的结果。 直接全局搜索Fm-Sign:看来key也没有做混…

韦尔股份:深蹲起跳?

利润大增7倍&#xff0c;是反转信号还是回光返照&#xff1f; 今天我们聊聊光学半导体龙头——韦尔股份。 上周末&#xff0c;韦尔股份发布半年业绩预告&#xff0c;预计上半年净利润13至14亿&#xff0c;同比增幅高达 754%至 819%。 然而&#xff0c;回首 2023 年它的净利仅 …

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介绍&#xff1a; 1.2 属性介绍&#xff1a; 1.3细节理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-网格布局&#xff1a; 3.1QGridLayout介绍&#xff1a; 3.2常用方法&#xff1a…

如何在 Windows 10 上恢复未保存的 Word 文档

您是否整晚都在处理一个重要的 word 文件&#xff0c;但忘记保存它了&#xff1f;本文适合您。在这里&#xff0c;我们将解释如何恢复未保存的 word 文档。除此之外&#xff0c;您还将学习如何恢复已删除的 word 文档。 从专业人士到高中生&#xff0c;每个人都了解丢失重要 W…

three完全开源扩展案例01-三角形渐变

演示地址 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(75, box.clientWidth / box.client…

杜比全景声——空间音频技术

什么是杜比&#xff1f;是否是标清、高清、超清之上的更清晰的格式&#xff1f;杜比全景声 和传统多声道立体声的差别&#xff1f;杜比全景声音频的渲染方式&#xff1f;车载平台上杜比技术的应用&#xff1f; 杜比技术的起源 杜比实验室&#xff08;Dolby Laboratories&…

大数据基础:Hadoop之MapReduce重点架构原理

文章目录 Hadoop之MapReduce重点架构原理 一、MapReduce概念 二、MapReduce 编程思想 2.1、Map阶段 2.2、Reduce阶段 三、MapReduce处理数据流程 四、MapReduce Shuffle 五、MapReduce注意点 六、MapReduce的三次排序 Hadoop之MapReduce重点架构原理 一、MapReduce概…

讲讲 JVM 的内存结构(附上Demo讲解)

讲讲 JVM 的内存结构 什么是 JVM 内存结构&#xff1f;线程私有程序计数器​虚拟机栈本地方法栈 线程共享堆​方法区​注意永久代​元空间​运行时常量池​直接内存​ 代码详解 什么是 JVM 内存结构&#xff1f; JVM内存结构分为5大区域&#xff0c;程序计数器、虚拟机栈、本地…

【AI前沿】深度学习:神经网络基础

文章目录 &#x1f4d1;引言一、神经元和感知器1.1 神经元的基本概念1.2 感知器模型 二、多层感知器&#xff08;MLP&#xff09;2.1 MLP的基本结构2.2 激活函数的重要性2.3 激活函数2.4 激活函数的选择 三、小结 &#x1f4d1;引言 深度学习是现代人工智能的核心技术之一&…

kotlin Flow 学习指南 (三)最终篇

目录 前言Flow生命周期StateFlow 替代LiveDataSharedFlow其他常见应用场景处理复杂、耗时逻辑存在依赖关系的接口请求组合多个接口的数据 Flow使用注意事项总结 前言 前面两篇文章&#xff0c;介绍了Flow是什么&#xff0c;如何使用&#xff0c;以及相关的操作符进阶&#xff…

如何挑选适合的需求池管理系统?10款优质工具分享

本文将分享10款优质需求池管理工具&#xff1a;PingCode、Worktile、Teambition、Epicor Kinetic、TAPD、SAP IBP、Logility、RELEX Solutions、JIRA、明道云。 在管理项目和产品需求时&#xff0c;正确的工具能够大幅提高效率与透明度。如何从众多需求池工具中选择最适合团队的…

自定义类型:联合体

像结构体一样&#xff0c;联合体也是由一个或者多个成员组成&#xff0c;这些成员可以是不同的类型。 联合体类型的声明 编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫&#xff1a;共⽤体。 输出结果&#xff1a; 联合体…

【基于R语言群体遗传学】-16-中性检验Tajima‘s D及连锁不平衡 linkage disequilibrium (LD)

Tajimas D Test 已经开发了几种中性检验&#xff0c;用于识别模型假设的潜在偏差。在这里&#xff0c;我们将说明一种有影响力的中性检验&#xff0c;即Tajimas D&#xff08;Tajima 1989&#xff09;。Tajimas D通过比较数据集中的两个&#x1d703; 4N&#x1d707;估计值来…

spark shuffle写操作——UnsafeShuffleWriter

PackedRecordPointer 使用long类型packedRecordPointer存储数据。 数据结构为&#xff1a;[24 bit partition number][13 bit memory page number][27 bit offset in page] LongArray LongArray不同于java中long数组。LongArray可以使用堆内内存也可以使用堆外内存。 Memor…