深度学习数学基础

数学基础

本文总结了深度学习中涉及的有关线性代数、微分和概率的基础知识。

线性代数

下面分别概括了向量、矩阵、运算、范数、特征向量和特征值的概念。

向量

本文中的向量指的是列向量。一个 n n n维向量 x \boldsymbol{x} x的表达式可写成

x = [ x 1 x 2 ⋮ x n ] , \boldsymbol{x} = \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix}, x=x1x2xn,

其中 x 1 , … , x n x_1, \ldots, x_n x1,,xn是向量的元素。我们将各元素均为实数的 n n n维向量 x \boldsymbol{x} x记作 x ∈ R n \boldsymbol{x} \in \mathbb{R}^{n} xRn x ∈ R n × 1 \boldsymbol{x} \in \mathbb{R}^{n \times 1} xRn×1

矩阵

一个 m m m n n n列矩阵的表达式可写成

X = [ x 11 x 12 … x 1 n x 21 x 22 … x 2 n ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 … x m n ] , \boldsymbol{X} = \begin{bmatrix} x_{11} & x_{12} & \dots & x_{1n} \\ x_{21} & x_{22} & \dots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \dots & x_{mn} \end{bmatrix}, X=x11x21xm1x12x22xm2x1nx2nxmn,

其中 x i j x_{ij} xij是矩阵 X \boldsymbol{X} X中第 i i i行第 j j j列的元素( 1 ≤ i ≤ m , 1 ≤ j ≤ n 1 \leq i \leq m, 1 \leq j \leq n 1im,1jn)。我们将各元素均为实数的 m m m n n n列矩阵 X \boldsymbol{X} X记作 X ∈ R m × n \boldsymbol{X} \in \mathbb{R}^{m \times n} XRm×n。不难发现,向量是特殊的矩阵。

运算

n n n维向量 a \boldsymbol{a} a中的元素为 a 1 , … , a n a_1, \ldots, a_n a1,,an n n n维向量 b \boldsymbol{b} b中的元素为 b 1 , … , b n b_1, \ldots, b_n b1,,bn。向量 a \boldsymbol{a} a b \boldsymbol{b} b的点乘(内积)是一个标量:

a ⋅ b = a 1 b 1 + … + a n b n . \boldsymbol{a} \cdot \boldsymbol{b} = a_1 b_1 + \ldots + a_n b_n. ab=a1b1++anbn.

设两个 m m m n n n列矩阵

A = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 … a m n ] , B = [ b 11 b 12 … b 1 n b 21 b 22 … b 2 n ⋮ ⋮ ⋱ ⋮ b m 1 b m 2 … b m n ] . \boldsymbol{A} = \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{bmatrix},\quad \boldsymbol{B} = \begin{bmatrix} b_{11} & b_{12} & \dots & b_{1n} \\ b_{21} & b_{22} & \dots & b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ b_{m1} & b_{m2} & \dots & b_{mn} \end{bmatrix}. A=a11a21am1a12a22am2a1na2namn,B=b11b21bm1b12b22bm2b1nb2nbmn.

矩阵 A \boldsymbol{A} A的转置是一个 n n n m m m列矩阵,它的每一行其实是原矩阵的每一列:
A ⊤ = [ a 11 a 21 … a m 1 a 12 a 22 … a m 2 ⋮ ⋮ ⋱ ⋮ a 1 n a 2 n … a m n ] . \boldsymbol{A}^\top = \begin{bmatrix} a_{11} & a_{21} & \dots & a_{m1} \\ a_{12} & a_{22} & \dots & a_{m2} \\ \vdots & \vdots & \ddots & \vdots \\ a_{1n} & a_{2n} & \dots & a_{mn} \end{bmatrix}. A=a11a12a1na21a22a2nam1am2amn.

两个相同形状的矩阵的加法是将两个矩阵按元素做加法:

A + B = [ a 11 + b 11 a 12 + b 12 … a 1 n + b 1 n a 21 + b 21 a 22 + b 22 … a 2 n + b 2 n ⋮ ⋮ ⋱ ⋮ a m 1 + b m 1 a m 2 + b m 2 … a m n + b m n ] . \boldsymbol{A} + \boldsymbol{B} = \begin{bmatrix} a_{11} + b_{11} & a_{12} + b_{12} & \dots & a_{1n} + b_{1n} \\ a_{21} + b_{21} & a_{22} + b_{22} & \dots & a_{2n} + b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} + b_{m1} & a_{m2} + b_{m2} & \dots & a_{mn} + b_{mn} \end{bmatrix}. A+B=a11+b11a21+b21am1+bm1a12+b12a22+b22am2+bm2a1n+b1na2n+b2namn+bmn.

我们使用符号 ⊙ \odot 表示两个矩阵按元素做乘法的运算:

A ⊙ B = [ a 11 b 11 a 12 b 12 … a 1 n b 1 n a 21 b 21 a 22 b 22 … a 2 n b 2 n ⋮ ⋮ ⋱ ⋮ a m 1 b m 1 a m 2 b m 2 … a m n b m n ] . \boldsymbol{A} \odot \boldsymbol{B} = \begin{bmatrix} a_{11} b_{11} & a_{12} b_{12} & \dots & a_{1n} b_{1n} \\ a_{21} b_{21} & a_{22} b_{22} & \dots & a_{2n} b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} b_{m1} & a_{m2} b_{m2} & \dots & a_{mn} b_{mn} \end{bmatrix}. AB=a11b11a21b21am1bm1a12b12a22b22am2bm2a1nb1na2nb2namnbmn.

定义一个标量 k k k。标量与矩阵的乘法也是按元素做乘法的运算:

k A = [ k a 11 k a 12 … k a 1 n k a 21 k a 22 … k a 2 n ⋮ ⋮ ⋱ ⋮ k a m 1 k a m 2 … k a m n ] . k\boldsymbol{A} = \begin{bmatrix} ka_{11} & ka_{12} & \dots & ka_{1n} \\ ka_{21} & ka_{22} & \dots & ka_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ ka_{m1} & ka_{m2} & \dots & ka_{mn} \end{bmatrix}. kA=ka11ka21kam1ka12ka22kam2ka1nka2nkamn.

其他诸如标量与矩阵按元素相加、相除等运算与上式中的相乘运算类似。矩阵按元素开根号、取对数等运算也就是对矩阵每个元素开根号、取对数等,并得到和原矩阵形状相同的矩阵。

矩阵乘法和按元素的乘法不同。设 A \boldsymbol{A} A m m m p p p列的矩阵, B \boldsymbol{B} B p p p n n n列的矩阵。两个矩阵相乘的结果

A B = [ a 11 a 12 … a 1 p a 21 a 22 … a 2 p ⋮ ⋮ ⋱ ⋮ a i 1 a i 2 … a i p ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 … a m p ] [ b 11 b 12 … b 1 j … b 1 n b 21 b 22 … b 2 j … b 2 n ⋮ ⋮ ⋱ ⋮ ⋱ ⋮ b p 1 b p 2 … b p j … b p n ] \boldsymbol{A} \boldsymbol{B} = \begin{bmatrix} a_{11} & a_{12} & \dots & a_{1p} \\ a_{21} & a_{22} & \dots & a_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ a_{i1} & a_{i2} & \dots & a_{ip} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mp} \end{bmatrix} \begin{bmatrix} b_{11} & b_{12} & \dots & b_{1j} & \dots & b_{1n} \\ b_{21} & b_{22} & \dots & b_{2j} & \dots & b_{2n} \\ \vdots & \vdots & \ddots & \vdots & \ddots & \vdots \\ b_{p1} & b_{p2} & \dots & b_{pj} & \dots & b_{pn} \end{bmatrix} AB=a11a21ai1am1a12a22ai2am2a1pa2paipampb11b21bp1b12b22bp2b1jb2jbpjb1nb2nbpn

是一个 m m m n n n列的矩阵,其中第 i i i行第 j j j列( 1 ≤ i ≤ m , 1 ≤ j ≤ n 1 \leq i \leq m, 1 \leq j \leq n 1im,1jn)的元素为

a i 1 b 1 j + a i 2 b 2 j + … + a i p b p j = ∑ k = 1 p a i k b k j . a_{i1}b_{1j} + a_{i2}b_{2j} + \ldots + a_{ip}b_{pj} = \sum_{k=1}^p a_{ik}b_{kj}. ai1b1j+ai2b2j++aipbpj=k=1paikbkj.

范数

n n n维向量 x \boldsymbol{x} x中的元素为 x 1 , … , x n x_1, \ldots, x_n x1,,xn。向量 x \boldsymbol{x} x L p L_p Lp范数为

∥ x ∥ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 / p . \|\boldsymbol{x}\|_p = \left(\sum_{i=1}^n \left|x_i \right|^p \right)^{1/p}. xp=(i=1nxip)1/p.

例如, x \boldsymbol{x} x L 1 L_1 L1范数是该向量元素绝对值之和:

∥ x ∥ 1 = ∑ i = 1 n ∣ x i ∣ . \|\boldsymbol{x}\|_1 = \sum_{i=1}^n \left|x_i \right|. x1=i=1nxi.

x \boldsymbol{x} x L 2 L_2 L2范数是该向量元素平方和的平方根:

∥ x ∥ 2 = ∑ i = 1 n x i 2 . \|\boldsymbol{x}\|_2 = \sqrt{\sum_{i=1}^n x_i^2}. x2=i=1nxi2 .

我们通常用 ∥ x ∥ \|\boldsymbol{x}\| x指代 ∥ x ∥ 2 \|\boldsymbol{x}\|_2 x2

X \boldsymbol{X} X是一个 m m m n n n列矩阵。矩阵 X \boldsymbol{X} X的Frobenius范数为该矩阵元素平方和的平方根:

∥ X ∥ F = ∑ i = 1 m ∑ j = 1 n x i j 2 , \|\boldsymbol{X}\|_F = \sqrt{\sum_{i=1}^m \sum_{j=1}^n x_{ij}^2}, XF=i=1mj=1nxij2 ,

其中 x i j x_{ij} xij为矩阵 X \boldsymbol{X} X在第 i i i行第 j j j列的元素。

特征向量和特征值

对于一个 n n n n n n列的矩阵 A \boldsymbol{A} A,假设有标量 λ \lambda λ和非零的 n n n维向量 v \boldsymbol{v} v使

A v = λ v , \boldsymbol{A} \boldsymbol{v} = \lambda \boldsymbol{v}, Av=λv,

那么 v \boldsymbol{v} v是矩阵 A \boldsymbol{A} A的一个特征向量,标量 λ \lambda λ v \boldsymbol{v} v对应的特征值。

微分

我们在这里简要介绍微分的一些基本概念和演算。

导数和微分

假设函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:RR的输入和输出都是标量。函数 f f f的导数

f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h , f'(x) = \lim_{h \rightarrow 0} \frac{f(x+h) - f(x)}{h}, f(x)=h0limhf(x+h)f(x),

且假定该极限存在。给定 y = f ( x ) y = f(x) y=f(x),其中 x x x y y y分别是函数 f f f的自变量和因变量。以下有关导数和微分的表达式等价:

f ′ ( x ) = y ′ = d y d x = d f d x = d d x f ( x ) = D f ( x ) = D x f ( x ) , f'(x) = y' = \frac{\text{d}y}{\text{d}x} = \frac{\text{d}f}{\text{d}x} = \frac{\text{d}}{\text{d}x} f(x) = \text{D}f(x) = \text{D}_x f(x), f(x)=y=dxdy=dxdf=dxdf(x)=Df(x)=Dxf(x),

其中符号 D \text{D} D d / d x \text{d}/\text{d}x d/dx也叫微分运算符。常见的微分演算有 D C = 0 \text{D}C = 0 DC=0 C C C为常数)、 D x n = n x n − 1 \text{D}x^n = nx^{n-1} Dxn=nxn1 n n n为常数)、 D e x = e x \text{D}e^x = e^x Dex=ex D ln ⁡ ( x ) = 1 / x \text{D}\ln(x) = 1/x Dln(x)=1/x等。

如果函数 f f f g g g都可导,设 C C C为常数,那么

d d x [ C f ( x ) ] = C d d x f ( x ) , d d x [ f ( x ) + g ( x ) ] = d d x f ( x ) + d d x g ( x ) , d d x [ f ( x ) g ( x ) ] = f ( x ) d d x [ g ( x ) ] + g ( x ) d d x [ f ( x ) ] , d d x [ f ( x ) g ( x ) ] = g ( x ) d d x [ f ( x ) ] − f ( x ) d d x [ g ( x ) ] [ g ( x ) ] 2 . \begin{aligned} \frac{\text{d}}{\text{d}x} [Cf(x)] &= C \frac{\text{d}}{\text{d}x} f(x),\\ \frac{\text{d}}{\text{d}x} [f(x) + g(x)] &= \frac{\text{d}}{\text{d}x} f(x) + \frac{\text{d}}{\text{d}x} g(x),\\ \frac{\text{d}}{\text{d}x} [f(x)g(x)] &= f(x) \frac{\text{d}}{\text{d}x} [g(x)] + g(x) \frac{\text{d}}{\text{d}x} [f(x)],\\ \frac{\text{d}}{\text{d}x} \left[\frac{f(x)}{g(x)}\right] &= \frac{g(x) \frac{\text{d}}{\text{d}x} [f(x)] - f(x) \frac{\text{d}}{\text{d}x} [g(x)]}{[g(x)]^2}. \end{aligned} dxd[Cf(x)]dxd[f(x)+g(x)]dxd[f(x)g(x)]dxd[g(x)f(x)]=Cdxdf(x),=dxdf(x)+dxdg(x),=f(x)dxd[g(x)]+g(x)dxd[f(x)],=[g(x)]2g(x)dxd[f(x)]f(x)dxd[g(x)].

如果 y = f ( u ) y=f(u) y=f(u) u = g ( x ) u=g(x) u=g(x)都是可导函数,依据链式法则,

d y d x = d y d u d u d x . \frac{\text{d}y}{\text{d}x} = \frac{\text{d}y}{\text{d}u} \frac{\text{d}u}{\text{d}x}. dxdy=dudydxdu.

泰勒展开

函数 f f f的泰勒展开式是

f ( x ) = ∑ n = 0 ∞ f ( n ) ( a ) n ! ( x − a ) n , f(x) = \sum_{n=0}^\infty \frac{f^{(n)}(a)}{n!} (x-a)^n, f(x)=n=0n!f(n)(a)(xa)n,

其中 f ( n ) f^{(n)} f(n)为函数 f f f n n n阶导数(求 n n n次导数), n ! n! n! n n n的阶乘。假设 ϵ \epsilon ϵ是一个足够小的数,如果将上式中 x x x a a a分别替换成 x + ϵ x+\epsilon x+ϵ x x x,可以得到

f ( x + ϵ ) ≈ f ( x ) + f ′ ( x ) ϵ + O ( ϵ 2 ) . f(x + \epsilon) \approx f(x) + f'(x) \epsilon + \mathcal{O}(\epsilon^2). f(x+ϵ)f(x)+f(x)ϵ+O(ϵ2).

由于 ϵ \epsilon ϵ足够小,上式也可以简化成

f ( x + ϵ ) ≈ f ( x ) + f ′ ( x ) ϵ . f(x + \epsilon) \approx f(x) + f'(x) \epsilon. f(x+ϵ)f(x)+f(x)ϵ.

偏导数

u u u为一个有 n n n个自变量的函数, u = f ( x 1 , x 2 , … , x n ) u = f(x_1, x_2, \ldots, x_n) u=f(x1,x2,,xn),它有关第 i i i个变量 x i x_i xi的偏导数为

∂ u ∂ x i = lim ⁡ h → 0 f ( x 1 , … , x i − 1 , x i + h , x i + 1 , … , x n ) − f ( x 1 , … , x i , … , x n ) h . \frac{\partial u}{\partial x_i} = \lim_{h \rightarrow 0} \frac{f(x_1, \ldots, x_{i-1}, x_i+h, x_{i+1}, \ldots, x_n) - f(x_1, \ldots, x_i, \ldots, x_n)}{h}. xiu=h0limhf(x1,,xi1,xi+h,xi+1,,xn)f(x1,,xi,,xn).

以下有关偏导数的表达式等价:

∂ u ∂ x i = ∂ f ∂ x i = f x i = f i = D i f = D x i f . \frac{\partial u}{\partial x_i} = \frac{\partial f}{\partial x_i} = f_{x_i} = f_i = \text{D}_i f = \text{D}_{x_i} f. xiu=xif=fxi=fi=Dif=Dxif.

为了计算 ∂ u / ∂ x i \partial u/\partial x_i u/xi,只需将 x 1 , … , x i − 1 , x i + 1 , … , x n x_1, \ldots, x_{i-1}, x_{i+1}, \ldots, x_n x1,,xi1,xi+1,,xn视为常数并求 u u u有关 x i x_i xi的导数。

梯度

假设函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:RnR的输入是一个 n n n维向量 x = [ x 1 , x 2 , … , x n ] ⊤ \boldsymbol{x} = [x_1, x_2, \ldots, x_n]^\top x=[x1,x2,,xn],输出是标量。函数 f ( x ) f(\boldsymbol{x}) f(x)有关 x \boldsymbol{x} x的梯度是一个由 n n n个偏导数组成的向量:

∇ x f ( x ) = [ ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , … , ∂ f ( x ) ∂ x n ] ⊤ . \nabla_{\boldsymbol{x}} f(\boldsymbol{x}) = \bigg[\frac{\partial f(\boldsymbol{x})}{\partial x_1}, \frac{\partial f(\boldsymbol{x})}{\partial x_2}, \ldots, \frac{\partial f(\boldsymbol{x})}{\partial x_n}\bigg]^\top. xf(x)=[x1f(x),x2f(x),,xnf(x)].

为表示简洁,我们有时用 ∇ f ( x ) \nabla f(\boldsymbol{x}) f(x)代替 ∇ x f ( x ) \nabla_{\boldsymbol{x}} f(\boldsymbol{x}) xf(x)

假设 x \boldsymbol{x} x是一个向量,常见的梯度演算包括

∇ x A ⊤ x = A , ∇ x x ⊤ A = A , ∇ x x ⊤ A x = ( A + A ⊤ ) x , ∇ x ∥ x ∥ 2 = ∇ x x ⊤ x = 2 x . \begin{aligned} \nabla_{\boldsymbol{x}} \boldsymbol{A}^\top \boldsymbol{x} &= \boldsymbol{A}, \\ \nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A} &= \boldsymbol{A}, \\ \nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A} \boldsymbol{x} &= (\boldsymbol{A} + \boldsymbol{A}^\top)\boldsymbol{x},\\ \nabla_{\boldsymbol{x}} \|\boldsymbol{x} \|^2 &= \nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{x} = 2\boldsymbol{x}. \end{aligned} xAxxxAxxAxxx2=A,=A,=(A+A)x,=xxx=2x.

类似地,假设 X \boldsymbol{X} X是一个矩阵,那么
∇ X ∥ X ∥ F 2 = 2 X . \nabla_{\boldsymbol{X}} \|\boldsymbol{X} \|_F^2 = 2\boldsymbol{X}. XXF2=2X.

海森矩阵

假设函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:RnR的输入是一个 n n n维向量 x = [ x 1 , x 2 , … , x n ] ⊤ \boldsymbol{x} = [x_1, x_2, \ldots, x_n]^\top x=[x1,x2,,xn],输出是标量。假定函数 f f f所有的二阶偏导数都存在, f f f的海森矩阵 H \boldsymbol{H} H是一个 n n n n n n列的矩阵:

H = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 … ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 … ∂ 2 f ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 … ∂ 2 f ∂ x n 2 ] , \boldsymbol{H} = \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \dots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \dots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \dots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix}, H=x122fx2x12fxnx12fx1x22fx222fxnx22fx1xn2fx2xn2fxn22f,

其中二阶偏导数

∂ 2 f ∂ x i ∂ x j = ∂ ∂ x j ( ∂ f ∂ x i ) . \frac{\partial^2 f}{\partial x_i \partial x_j} = \frac{\partial }{\partial x_j} \left(\frac{\partial f}{ \partial x_i}\right). xixj2f=xj(xif).

概率

最后,我们简要介绍条件概率、期望和均匀分布。

条件概率

假设事件 A A A和事件 B B B的概率分别为 P ( A ) P(A) P(A) P ( B ) P(B) P(B),两个事件同时发生的概率记作 P ( A ∩ B ) P(A \cap B) P(AB) P ( A , B ) P(A, B) P(A,B)。给定事件 B B B,事件 A A A的条件概率

P ( A ∣ B ) = P ( A ∩ B ) P ( B ) . P(A \mid B) = \frac{P(A \cap B)}{P(B)}. P(AB)=P(B)P(AB).

也就是说,

P ( A ∩ B ) = P ( B ) P ( A ∣ B ) = P ( A ) P ( B ∣ A ) . P(A \cap B) = P(B) P(A \mid B) = P(A) P(B \mid A). P(AB)=P(B)P(AB)=P(A)P(BA).

当满足

P ( A ∩ B ) = P ( A ) P ( B ) P(A \cap B) = P(A) P(B) P(AB)=P(A)P(B)

时,事件 A A A和事件 B B B相互独立。

期望

离散的随机变量 X X X的期望(或平均值)为

E ( X ) = ∑ x x P ( X = x ) . E(X) = \sum_{x} x P(X = x). E(X)=xxP(X=x).

均匀分布

假设随机变量 X X X服从 [ a , b ] [a, b] [a,b]上的均匀分布,即 X ∼ U ( a , b ) X \sim U(a, b) XU(a,b)。随机变量 X X X a a a b b b之间任意一个数的概率相等。

小结

  • 本节总结了本书中涉及的有关线性代数、微分和概率的基础知识。

练习

  • 求函数 f ( x ) = 3 x 1 2 + 5 e x 2 f(\boldsymbol{x}) = 3x_1^2 + 5e^{x_2} f(x)=3x12+5ex2的梯度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东心十

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值