深度学习——第4.3章 深度学习的数学基础

第4章 深度学习的数学基础

目录

4.7 指数函数和对数函数

4.7 指数函数和对数函数

深度学习经常会用到Sigmoid函数和Softmax函数,这些函数是通过包含exp(x)的指数函数创建的。后面我们需要求解这些函数的导数。

4.7.1 指数

指数是一个基于“乘以某个数多少次”,即乘法的次数的概念,并且不只是自然数,它还可以扩展到负数和实数。

在这里插入图片描述

图4-23 指数的定义与公式

指数函数的定义是:

y = a x (4-105) y=a^x \tag{4-105} y=ax(4-105)

如果要强调指数函数中的 a a a,那么可以称之为“以 a a a为底数的指数函数”。这里的底数 a a a是一个大于0且不等于1的数。

观察式4-105的图形可知(代码如下:),当a>1时,函数图形是单调递增的;当 0 < a < 1 0<a<1 0<a<1时,图形是单调递减的。函数的输出总为正数。

# 代码清单 4-4-(1)
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inlinex = np.linspace(-4, 4, 100)
y = 2**x
y2 = 3**x
y3 = 0.5**xplt.figure(figsize=(5, 5))
plt.plot(x, y, 'black', linewidth=3, label='$y=2^x$')
plt.plot(x, y2, 'cornflowerblue', linewidth=3, label='$y=3^x$')
plt.plot(x, y3, 'gray', linewidth=3, label='$y=0.5^x$')
plt.ylim(-2, 6)
plt.xlim(-4, 4)
plt.grid(True)
plt.legend(loc='lower right')
plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述

图4-24 指数函数

指数具有以下性质,这些性质被称为指数法则

a b ⋅ a c = a b + c a^{b} \cdot a^{c}=a^{b+c} abac=ab+c

a b a c = a b − c \frac{a^{b}}{a^{c}}=a^{b-c} acab=abc

( a b ) c = a b c \left(a^{b}\right)^{c}=a^{b c} (ab)c=abc

4.7.2 对数

对数的公式如图4-28所示。把指数函数的输入和输出反过来,就可以得到对数函数。也就是说,对数函数是指数函数的反函数。

在这里插入图片描述

图4-25 对数的定义与公式

思考下式:

x = a y (4-106) x=a^y \tag{4-106} x=ay(4-106)

首先,把式4-106变形为“ y = y= y=”的形式,得到:

y = log ⁡ a x (4-107) y=\log_{a}x \tag{4-107} y=logax(4-107)

绘制函数图形(代码如下:),式4-107与 y = a x y=a^x y=ax的图形相对于 y = x y=x y=x的直线相互对称。

# 代码清单 4-4-(2)
x = np.linspace(-8, 8, 100)
y = 2**x
z = np.zeros(100)x2 = np.linspace(0.001, 8, 100) # np.log(0)会导致出错,所以不能包含 0
y2 = np.log(x2) / np.log(2)# 通过公式 (7) 计算以 2 为底数的 logplt.figure(figsize=(5, 5))
plt.plot(x, y, 'black', linewidth=3)
plt.plot(x2, y2, 'cornflowerblue', linewidth=3)
plt.plot(x, x, 'black', linestyle='--', linewidth=1)
plt.plot(x, z, 'r',linewidth=1)
plt.plot(z, x, 'r',linewidth=1)
plt.ylim(-8, 8)
plt.xlim(-8, 8)
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述
图4-26 对数函数

对数函数具体以下性质,称为对数运算法则

log ⁡ a b = log ⁡ a + log ⁡ b \log a b=\log a+\log b logab=loga+logb

log ⁡ a b = log ⁡ a − log ⁡ b \log \frac{a}{b}=\log a-\log b logba=logalogb

log ⁡ a b = b log ⁡ a \log a^{b}=b \log a logab=bloga

log ⁡ e = 1 \log \mathrm{e}=1 loge=1

使用对数函数可以把过大或过小的数转为便于处理的大小。比如, 100000000 = 1 0 8 100000000=10^8 100000000=108可以表示为 a = 10 a=10 a=10的对数,即 log ⁡ 10 1 0 8 = 8 \log _{10}10^8=8 log10108=8,而 0.00000001 = 1 0 − 8 0.00000001=10^{-8} 0.00000001=108可以表示为 log ⁡ 10 1 0 − 8 = − 8 \log _{10}10^{-8}=-8 log10108=8

如果只写作 log ⁡ x \log x logx,不写出底数,则默认底数为 e e e e e e是一个为2.718…的无理数,又称为自然常数(自然对数的底数)或纳皮尔常数

机器学习中经常出现非常大或非常小的数,在使用程序处理这些数时,可能会引起溢出(位数溢出)。对于这样的数,可以使用对数防止溢出。

此外,对数还可以把乘法运算转换为加法运算。对图4-28(4)进行扩展,可以得到:

log ⁡ ∏ n = 1 N f ( n ) = ∑ n = 1 N log ⁡ f ( n ) (4-108) \log \prod_{n=1}^{N} f(n)=\sum_{n=1}^{N} \log f(n)\tag{4-108} logn=1Nf(n)=n=1Nlogf(n)(4-108)

像这样转换之后,计算过程会更加轻松。因此,对于后面将会出现的似然这种以乘法运算形式表示的概率,往往会借助其对数,即似然对数来进行计算。

我们常常遇到“已知函数 f ( x ) f(x) f(x),求使 f ( x ) f(x) f(x)最小的 x ∗ x^* x”的情况。此时,其对数函数 log ⁡ f ( x ) \log f(x) logf(x)也在 x = x ∗ x=x^* x=x时取最小值。对数函数是一个单调递增函数,所以即使最小值改变了,使函数取最小值的那个值也不会改变。这在求最大值时也成立。使 f ( x ) f(x) f(x)取最大值的值也会使 f ( x ) f(x) f(x)的对数函数取最大值。代码如下:

# 代码清单 4-4-(3)
x = np.linspace(-4, 4, 100)
y = (x - 1)**2 + 2
logy = np.log(y)plt.figure(figsize=(4, 4))
plt.plot(x, y, 'black', linewidth=3)
plt.plot(x, logy, 'cornflowerblue', linewidth=3)
plt.yticks(range(-4,9,1))
plt.xticks(range(-4,5,1))
plt.ylim(-4, 8)
plt.xlim(-4, 4)
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述

图4-27 对数函数取最小值的位置不变

鉴于这个性质,在求 f ( x ) f(x) f(x)的最小值 x ∗ x^* x时,我们经常通过 log ⁡ f ( x ) \log f(x) logf(x)求最小值 x ∗ x^* x。特别是当 f ( x ) f(x) f(x)以积的形式表示时,如式4-108所示,通过 log ⁡ \log log将其转换为和的形式,就会更容易求出导数,非常方便。

4.7.3 指数函数的导数

指数函数 y = a x y=a^x y=ax x x x的导数为:

y ′ = ( a x ) ′ = a x log ⁡ a (4-109) y^{\prime}=\left(a^{x}\right)^{\prime}=a^{x} \log a\tag{4-109} y=(ax)=axloga(4-109)

这里把 d y / d x dy/dx dy/dx简单地表示为 y ’ y’ y。函数 y = a x y=a^x y=ax的导数是原本的函数式乘以 log ⁡ a \log a loga的形式。

a = 2 a=2 a=2,那么 log ⁡ 2 \log 2 log2约为0.69, y = a x y=a^x y=ax的图形会稍微向下缩一些。

# 代码清单 4-4-(4)
x = np.linspace(-4, 4, 100)
a = 2
y = a**x
dy = np.log(a) * yplt.figure(figsize=(4, 4))
plt.plot(x, y, 'rosybrown', linestyle='--', linewidth=3)
plt.plot(x, dy, color='black', linewidth=3)
plt.ylim(-1, 8)
plt.xlim(-4, 4)
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述

图4-28 指数函数的导数

这里有一个特殊情况,即当 a = e a=e a=e时, log ⁡ e = 1 \log e=1 loge=1

y ′ = ( e x ) ′ = e x (4-110) y^{\prime}=\left(e^{x}\right)^{\prime}=e^{x}\tag{4-110} y=(ex)=ex(4-110)

也就是说,当 a = e a=e a=e时,导函数的图形不变(图4-28右)。这个性质在计算导数时特别方便。

因此,以 e e e为底数的指数函数的应用很广泛,Sigmoid函数、Softmax函数和高斯函数也常常使用 e e e

4.7.4 对数函数的导数

对数函数的导数为反比例函数:

y ′ = ( log ⁡ x ) ′ = 1 x (4-111) y^{\prime}=(\log x)^{\prime}=\frac{1}{x}\tag{4-111} y=(logx)=x1(4-111)

代码如下:

# 代码清单 4-4-(5)
x = np.linspace(0.0001, 4, 100)  # 不能定义 0 以下
y = np.log(x)
dy = 1 / xplt.figure(figsize=(4, 4))
plt.plot(x, y, 'cyan', linestyle='--', linewidth=3)
plt.plot(x, dy, color='black', linewidth=3)
plt.ylim(-8, 8)
plt.xlim(-1, 4)
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述

图4-29 对数函数的导数

第7.1节会出现 { l o g ( 1 − x ) } ′ \{log(1-x)\}' {log(1x)}这样的导数,这里设 z = 1 − x z=1-x z=1x y = log ⁡ z y=\log z y=logz,然后,使用链式法则即可求出导数:

d y d x = d y d z ⋅ d z d x = 1 z ⋅ ( − 1 ) = − 1 1 − x (4-112) \frac{\mathrm{d} y}{\mathrm{~d} x}=\frac{\mathrm{d} y}{\mathrm{~d} z} \cdot \frac{\mathrm{d} z}{\mathrm{~d} x}=\frac{1}{z} \cdot(-1)=-\frac{1}{1-x}\tag{4-112}  dxdy= dzdy dxdz=z1(1)=1x1(4-112)

4.7.5 Sigmoid函数

Sigmoid函数是一个像平滑的阶梯一样的函数:

y = 1 1 + e − x (4-113) y=\frac{1}{1+\mathrm{e}^{-x}}\tag{4-113} y=1+ex1(4-113)

e − x e^{-x} ex也可以写作 e x p ( − x ) exp(-x) exp(x),所以Sigmoid函数有时也表示为:

y = 1 1 + e x p ( − x ) (4-114) y=\frac{1}{1+exp(-x)}\tag{4-114} y=1+exp(x)1(4-114)

这个函数的图形如图4-33所示,代码如下:

# 代码清单 4-4-(6)
x = np.linspace(-10, 10, 100)
y = 1 / (1 + np.exp(-x))
y1=np.zeros(100)
y2=np.ones(100)plt.figure(figsize=(4, 4))
plt.plot(x, y, 'black', linewidth=3)
plt.plot(x,y1,'r')
plt.plot(x,y2,c='violet')plt.ylim(-1, 2)
plt.xlim(-10, 10)
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述

图4-30 Sigmoid函数

Sigmoid函数会把从负实数到正实数的数转换为0-1的数,所以常常用于表示概率。但这个函数并不是为了使输出范围为0-1而刻意创建的,而是基于一定的条件自然推导出来的。

Sigmoid函数在神经网络中是表示神经元的特性的重要函数。我们会用到Sigmoid函数的导数,所以这里先求一下它的导数。

先思考导数公式,为了使其与式4-113一致,这里设 f ( x ) = 1 + e x p ( − x ) f(x)=1+exp(-x) f(x)=1+exp(x)

( 1 f ( x ) ) ′ = − f ′ ( x ) f ( x ) 2 (4-115) \left(\frac{1}{f(x)}\right)^{\prime}=-\frac{f^{\prime}(x)}{f(x)^{2}}\tag{4-115} (f(x)1)=f(x)2f(x)(4-115)

f ( x ) f(x) f(x)的导数为 f ′ ( x ) = − e x p ( − x ) f'(x)=-exp(-x) f(x)=exp(x),因此可得到:

y ′ = ( 1 1 + exp ⁡ ( − x ) ) ′ = − − exp ⁡ ( − x ) ( 1 + exp ⁡ ( − x ) ) 2 = exp ⁡ ( − x ) ( 1 + exp ⁡ ( − x ) ) 2 (4-116) y^{\prime}=\left(\frac{1}{1+\exp (-x)}\right)^{\prime}=\\-\frac{-\exp (-x)}{(1+\exp (-x))^{2}}=\frac{\exp (-x)}{(1+\exp (-x))^{2}}\tag{4-116} y=(1+exp(x)1)=(1+exp(x))2exp(x)=(1+exp(x))2exp(x)(4-116)

对式4-116略微变形:

y ′ = 1 1 + exp ⁡ ( − x ) ⋅ 1 + exp ⁡ ( − x ) − 1 1 + exp ⁡ ( − x ) = 1 1 + exp ⁡ ( − x ) ⋅ { 1 − 1 1 + exp ⁡ ( − x ) } (4-117) y^{\prime} =\frac{1}{1+\exp (-x)} \cdot \frac{1+\exp (-x)-1}{1+\exp (-x)} =\\ \frac{1}{1+\exp (-x)} \cdot\left\{1-\frac{1}{1+\exp (-x)}\right\}\tag{4-117} y=1+exp(x)11+exp(x)1+exp(x)1=1+exp(x)1{11+exp(x)1}(4-117)

这里, 1 / ( 1 + e x p ( − x ) ) 1/(1+exp(-x)) 1/(1+exp(x))就是 y y y,所以可以用改写式子,改写后的式子非常简洁:

y ′ = y ( 1 − y ) (4-118) y'=y(1-y) \tag{4-118} y=y(1y)(4-118)

4.7.6 Softmax函数

已知 x 0 = 2 x_{0}=2 x0=2 x 1 = 1 x_{1}=1 x1=1 x 2 = − 1 x_{2}=-1 x2=1,现在我们要保持这些数的大小关系不动,把它们转换为表示概率的 y 0 y_{0} y0 y 1 y_{1} y1 y 2 y_{2} y2。既然是概率,就必须是0-1的数,而且所有数的和必须是1。

这时就需要用Softmax函数。首先,求出各个 x i x_i xi e x p exp exp的和 u u u

u = exp ⁡ ( x 0 ) + exp ⁡ ( x 1 ) + exp ⁡ ( x 2 ) (4-119) u=\exp \left(x_{0}\right)+\exp \left(x_{1}\right)+\exp \left(x_{2}\right)\tag{4-119} u=exp(x0)+exp(x1)+exp(x2)(4-119)

使用式4-119,可以得到:

y 0 = exp ⁡ ( x 0 ) u , y 1 = exp ⁡ ( x 1 ) u , y 2 = exp ⁡ ( x 2 ) u (4-120) y_{0}=\frac{\exp \left(x_{0}\right)}{u}, y_{1}=\frac{\exp \left(x_{1}\right)}{u}, y_{2}=\frac{\exp \left(x_{2}\right)}{u}\tag{4-120} y0=uexp(x0),y1=uexp(x1),y2=uexp(x2)(4-120)

下面,我们实际编写代码创建Softmax函数,并测试:

# 代码清单 4-4-(7)
def softmax(x0, x1, x2):u = np.exp(x0) + np.exp(x1) + np.exp(x2)return np.exp(x0) / u, np.exp(x1) / u, np.exp(x2) / u# test
y = softmax(2, 1, -1)
print(np.round(y,2))  # (A) 显示小数点后两位的概率
print(np.sum(y))      # (B) 显示和

输出结果:

[0.71 0.26 0.04]
1.0

前面例子中的 x 0 = 2 x_{0}=2 x0=2 x 1 = 1 x_{1}=1 x1=1 x 2 = − 1 x_{2}=-1 x2=1分别被转换为了 y 0 = 0.71 y_{0}=0.71 y0=0.71 y 1 = 0.26 y_{1}=0.26 y1=0.26 y 2 = 0.04 y_{2}=0.04 y2=0.04。可以看到,它们的确是按照原本的大小关系被分配了0-1的数,而且所有数相加之后的和为1。

Softmax函数的图形是什么样的呢?由于输入和输出都是三维的,所以不能直接绘制图形。因此,这里只固定 x 2 = 1 x_{2}=1 x2=1,然后把输入各种 x 0 x_{0} x0 x 1 x_{1} x1之后得到的 y 0 y_{0} y0 y 1 y_{1} y1展示在图形上。代码如下:

# 代码清单 4-4-(8)from mpl_toolkits.mplot3d import Axes3Dxn = 20
x0 = np.linspace(-4, 4, xn)
x1 = np.linspace(-4, 4, xn)y = np.zeros((xn, xn, 3))
for i0 in range(xn):for i1 in range(xn):y[i1, i0, :] = softmax(x0[i0], x1[i1], 1)xx0, xx1 = np.meshgrid(x0, x1)
plt.figure(figsize=(8, 3))
for i in range(2):ax = plt.subplot(1, 2, i + 1, projection='3d')ax.plot_surface(xx0, xx1, y[:, :, i], rstride=1,  cstride=1, alpha=0.3, color='blue', edgecolor='black')ax.set_xlabel('$x_0$', fontsize=14)ax.set_ylabel('$x_1$', fontsize=14)ax.view_init(40, -125)plt.show()

输出结果:
在这里插入图片描述
在这里插入图片描述

图4-31 Softmax函数

x 2 x_{2} x2固定为1,再令 x 0 x_{0} x0 x 1 x_{1} x1变化之后, y 0 y_{0} y0 y 1 y_{1} y1的值会在0-1的范围内变化(图4-31左)。 x 0 x_{0} x0越大, y 0 y_{0} y0越趋近于1; x 1 x_{1} x1越大, y 1 y_{1} y1越趋近于1。图中没有显示 y 2 y_{2} y2,不过 y 2 y_{2} y2是1减去 y 0 y_{0} y0 y 1 y_{1} y1得到的差,所以应该可以想象到 y 2 y_{2} y2是什么样的。

Softmax函数不仅可以用在包含三个变量的情况中,也可以用在包含更多变量的情况中。设变量的数量为 K K K,Softmax函数可以表示为:

y i = exp ⁡ ( x i ) ∑ j = 0 K − 1 exp ⁡ ( x j ) (4-121) y_{i}=\frac{\exp \left(x_{i}\right)}{\sum_{j=0}^{K-1} \exp \left(x_{j}\right)}\tag{4-121} yi=j=0K1exp(xj)exp(xi)(4-121)

Softmax函数的偏导数将在随后章节出现,这里先求一下。首先,求 y 0 y_{0} y0 x 0 x_{0} x0的偏导数:

∂ y 0 ∂ x 0 = ∂ ∂ x 0 exp ⁡ ( x 0 ) u (4-122) \frac{\partial y_{0}}{\partial x_{0}}=\frac{\partial}{\partial x_{0}} \frac{\exp \left(x_{0}\right)}{u}\tag{4-122} x0y0=x0uexp(x0)(4-122)

这里必须要注意, u u u也是关于 x 0 x_{0} x0的函数。因此,需要使用导数公式,设:

f ( x ) = u = e x p ( x 0 ) + e x p ( x 1 ) + e x p ( x 2 ) , g ( x ) = e x p ( x 0 ) f(x)=u=exp(x_{0})+exp(x_{1})+exp(x_{2}), g(x)=exp(x_{0}) f(x)=u=exp(x0)+exp(x1)+exp(x2),g(x)=exp(x0)

则:

( g ( x ) f ( x ) ) ′ = g ′ ( x ) f ( x ) − g ( x ) f ′ ( x ) f ( x ) 2 (4-123) \left(\frac{g(x)}{f(x)}\right)^{\prime}=\frac{g^{\prime}(x) f(x)-g(x) f^{\prime}(x)}{f(x)^{2}}\tag{4-123} (f(x)g(x))=f(x)2g(x)f(x)g(x)f(x)(4-123)

推导过程

( f g ) ′ = f ′ g + f g ′ (fg)'=f'g+fg' (fg)=fg+fg

分析

例如: x × sin ⁡ x x \times \sin x x×sinx的导数等于 x x x的导数乘以 sin ⁡ x \sin x sinx x x x乘以 sin ⁡ x \sin x sinx的导数。等于 1 × sin ⁡ x + x × cos ⁡ x 1 \times \sin x + x \times \cos x 1×sinx+x×cosx

扩展资料

商的导数公式:

( u / v ) ′ = ( u v − 1 ) ′ (u/v)'=(uv^{-1})' (u/v)=(uv1)
= u ′ ( v − 1 ) + ( v − 1 ) ′ u =u'(v^{-1}) +(v^{-1})' u =u(v1)+(v1)u
= u ′ ( v − 1 ) + ( − 1 ) v − 2 u = u' (v^{-1}) + (-1)v^{-2}u =u(v1)+(1)v2u
= u ′ / v − u v ′ / ( v 2 ) =u'/v - u v'/(v^2) =u/vuv/(v2)

通分,易得:
( u / v ) = ( u ′ v − u v ′ ) / v 2 (u/v)=(u'v-uv')/v² (u/v)=(uvuv)/v2

这里以 f ′ ( x ) = ∂ f / ∂ x 0 , g ′ ( x ) = ∂ g / ∂ x 0 f'(x)=\partial f/ \partial x_0, g'(x)=\partial g/ \partial x_0 f(x)=f/x0,g(x)=g/x0思考:

f ′ ( x ) = ∂ ∂ x 0 f ( x ) = exp ⁡ ( x 0 ) g ′ ( x ) = ∂ ∂ x 0 g ( x ) = exp ⁡ ( x 0 ) (4-124) \begin{array}{l} f^{\prime}(x)=\frac{\partial}{\partial x_{0}} f(x)=\exp \left(x_{0}\right)\\ g^{\prime}(x)=\frac{\partial}{\partial x_{0}} g(x)=\exp \left(x_{0}\right) \end{array} \tag{4-124} f(x)=x0f(x)=exp(x0)g(x)=x0g(x)=exp(x0)(4-124)

因此,式4-123可变形为:

∂ y 0 ∂ x 0 = ( g ( x ) f ( x ) ) ′ = exp ⁡ ( x 0 ) u − exp ⁡ ( x 0 ) exp ⁡ ( x 0 ) u 2 = exp ⁡ ( x 0 ) u ( u − exp ⁡ ( x 0 ) u ) = exp ⁡ ( x 0 ) u ( u u − exp ⁡ ( x 0 ) u ) (4-125) \begin{aligned} \frac{\partial y_{0}}{\partial x_{0}}=\left(\frac{g(x)}{f(x)}\right)^{\prime} &=\frac{\exp \left(x_{0}\right) u-\exp \left(x_{0}\right) \exp \left(x_{0}\right)}{u^{2}} \\ &=\frac{\exp \left(x_{0}\right)}{u}\left(\frac{u-\exp \left(x_{0}\right)}{u}\right) \\ &=\frac{\exp \left(x_{0}\right)}{u}\left(\frac{u}{u}-\frac{\exp \left(x_{0}\right)}{u}\right) \end{aligned}\tag{4-125} x0y0=(f(x)g(x))=u2exp(x0)uexp(x0)exp(x0)=uexp(x0)(uuexp(x0))=uexp(x0)(uuuexp(x0))(4-125)

这里使用 y 0 = e x p ( x 0 ) / u y_0=exp(x_0)/u y0=exp(x0)/u,将式4-125表示为:

∂ y 0 ∂ x 0 = y 0 ( 1 − y 0 ) (4-126) \frac{\partial y_{0}}{\partial x_{0}}=y_0(1-y_0) \tag{4-126} x0y0=y0(1y0)(4-126)

令人震惊的是,上式的形式竟然跟Sigmoid函数的导数公式(式4-118)完全相同。

y ′ = y ( 1 − y ) (4-118) y'=y(1-y) \tag{4-118} y=y(1y)(4-118)

接下来,我们求 y 0 y_0 y0 x 1 x_1 x1的偏导数:

∂ y 0 ∂ x 1 = ∂ ∂ x 1 exp ⁡ ( x 0 ) u (4-127) \frac{\partial y_{0}}{\partial x_{1}}=\frac{\partial}{\partial x_{1}} \frac{\exp \left(x_{0}\right)}{u}\tag{4-127} x1y0=x1uexp(x0)(4-127)

这里也设 f ( x ) = u = e x p ( x 0 ) + e x p ( x 1 ) + e x p ( x 2 ) , g ( x ) = e x p ( x 0 ) f(x)=u=exp(x_0)+exp(x_1)+exp(x_2), g(x)=exp(x_0) f(x)=u=exp(x0)+exp(x1)+exp(x2),g(x)=exp(x0),并使用公式4-123:

( g ( x ) f ( x ) ) ′ = g ′ ( x ) f ( x ) − g ( x ) f ′ ( x ) f ( x ) 2 (4-123) \left(\frac{g(x)}{f(x)}\right)^{\prime}=\frac{g^{\prime}(x) f(x)-g(x) f^{\prime}(x)}{f(x)^{2}}\tag{4-123} (f(x)g(x))=f(x)2g(x)f(x)g(x)f(x)(4-123)

f ′ ( x ) = ∂ f / ∂ x 1 , g ′ ( x ) = ∂ g / ∂ x 1 f'(x)=\partial f/ \partial x_{1}, g'(x)=\partial g/ \partial x_{1} f(x)=f/x1,g(x)=g/x1,思考如何对 x 1 x_{1} x1求偏导数:

f ′ ( x ) = ∂ ∂ x 1 f ( x ) = exp ⁡ ( x 1 ) g ′ ( x ) = ∂ ∂ x 1 exp ⁡ ( x 0 ) = 0 \begin{array}{l} f^{\prime}(x)=\frac{\partial}{\partial x_{1}} f(x)=\exp \left(x_{1}\right) \\ g^{\prime}(x)=\frac{\partial}{\partial x_{1}} \exp \left(x_{0}\right)=0 \end{array} f(x)=x1f(x)=exp(x1)g(x)=x1exp(x0)=0

结果为:

∂ y 0 ∂ x 1 = g ′ ( x ) f ( x ) − g ( x ) f ′ ( x ) f ( x ) 2 = − exp ⁡ ( x 0 ) exp ⁡ ( x 1 ) u 2 = − exp ⁡ ( x 0 ) u ⋅ exp ⁡ ( x 1 ) u (4-128) \begin{aligned} \frac{\partial y_{0}}{\partial x_{1}} &=\frac{g^{\prime}(x) f(x)-g(x) f^{\prime}(x)}{f(x)^{2}}=\frac{-\exp \left(x_{0}\right) \exp \left(x_{1}\right)}{u^{2}} \\ &=-\frac{\exp \left(x_{0}\right)}{u} \cdot \frac{\exp \left(x_{1}\right)}{u} \end{aligned}\tag{4-128} x1y0=f(x)2g(x)f(x)g(x)f(x)=u2exp(x0)exp(x1)=uexp(x0)uexp(x1)(4-128)

这里使用 y 0 = e x p ( x 0 ) / u y_{0}=exp(x_{0})/u y0=exp(x0)/u y 1 = e x p ( x 1 ) / u y_{1}=exp(x_{1})/u y1=exp(x1)/u,可得到:

∂ y 0 ∂ x 1 = − y 0 y 1 (4-129) \frac{\partial y_{0}}{\partial x_{1}}=-y_{0} y_{1}\tag{4-129} x1y0=y0y1(4-129)

综合式4-126:

∂ y 0 ∂ x 0 = y 0 ( 1 − y 0 ) (4-126) \frac{\partial y_{0}}{\partial x_{0}}=y_0(1-y_0) \tag{4-126} x0y0=y0(1y0)(4-126)

和式4-129并加以拓展,得到:

∂ y j ∂ x i = y j ( I i j − y i ) (4-130) \frac{\partial y_{j}}{\partial x_{i}}=y_{j}\left(I_{i j}-y_{i}\right)\tag{4-130} xiyj=yj(Iijyi)(4-130)

这里, I i j I_{ij} Iij是一个在 i = j i=j i=j时为1,在 i ≠ j i\ne j i=j时为0的函数。 I i j I_{ij} Iij也可以表示为称为克罗内克函数。

4.7.7 Softmax函数和Sigmoid函数

Softmax函数和Sigmoid函数是非常相似的。这两个函数有什么关系呢?下面我们试着思考一下。一个包含两个变量的Softmax函数是:

y = e x 0 e x 0 + e x 1 (4-131) y=\frac{\mathrm{e}^{x_{0}}}{\mathrm{e}^{x_{0}}+\mathrm{e}^{x_{1}}}\tag{4-131} y=ex0+ex1ex0(4-131)

将分子和分母均乘以 e − x 0 e^{-x_{0}} ex0。并整理,再使用公式 e a e − b = e a − b e^ae^{-b}=e^{a-b} eaeb=eab,可以得到:

y = e x 0 e − x 0 e x 0 e − x 0 + e x 1 e − x 0 = e x 0 − x 0 e x 0 − x 0 + e x 1 − x 0 = 1 1 + e − ( x 0 − x 1 ) (4-132) y=\frac{\mathrm{e}^{x_{0}} \mathrm{e}^{-x_{0}}}{\mathrm{e}^{x_{0}} \mathrm{e}^{-x_{0}}+\mathrm{e}^{x_{1}} \mathrm{e}^{-x_{0}}}=\frac{\mathrm{e}^{x_{0}-x_{0}}}{\mathrm{e}^{x_{0}-x_{0}}+\mathrm{e}^{x_{1}-x_{0}}}=\frac{1}{1+\mathrm{e}^{-\left(x_{0}-x_{1}\right)}}\tag{4-132} y=ex0ex0+ex1ex0ex0ex0=ex0x0+ex1x0ex0x0=1+e(x0x1)1(4-132)

这里代入 x = x 0 − x 1 x=x_{0}-x_{1} x=x0x1,可以得到Sigmoid函数:

y = 1 1 + e − x (4-133) y=\frac {1}{1+e^{-x}} \tag {4-133} y=1+ex1(4-133)

也就是说,把包含两个变量的Softmax函数的输入 x 0 x_{0} x0 x 1 x_{1} x1,用它们的差 x = x 0 − x 1 x=x_{0}-x_{1} x=x0x1表示,就可以得到Sigmoid函数。也可以说,把Sigmoid函数扩展到多个变量之后得到的就是Softmax函数。

4.7.8 高斯函数

高斯函数可表示为:

y = e x p ( − x 2 ) (4-134) y=exp(-x^2) \tag{4-134} y=exp(x2)(4-134)

如图4-32左图中的黑线所示,高斯函数的图形以 x = 0 x=0 x=0为中心,呈吊钟形。

在这里插入图片描述

图4-32高斯函数

μ \mu μ表示这个函数图形的中心(均值),用 σ \sigma σ表示分布的幅度(标准差),用 a a a表示高度,则高斯函数为(图4-32左图中的灰线):

y = a exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) (4-135) y=a \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)\tag{4-135} y=aexp(2σ2(xμ)2)(4-135)

下面尝试绘制它的图形,代码如下:

# 代码清单 4-4-(9)
def gauss(mu, sigma, a):return a * np.exp(-(x - mu)**2 / (2 * sigma**2))x = np.linspace(-4, 4, 100)
plt.figure(figsize=(4, 4))
plt.plot(x, gauss(0, 1, 1), 'black', linewidth=3)
plt.plot(x, gauss(2, 2, 0.5), 'gray', linewidth=3)
plt.ylim(-.5, 1.5)
plt.xlim(-4, 4)
plt.grid(True)
plt.show()

输出结果:
在这里插入图片描述
高斯函数有时会用于表示概率分布,在这种情况下,要想使得对 x x x求积分的值为1,就需要令式4-135中的 a a a为:

a = 1 ( 2 π σ 2 ) 1 / 2 (4-136) a=\frac{1}{\left(2 \pi \sigma^{2}\right)^{1 / 2}}\tag{4-136} a=(2πσ2)1/21(4-136)

4.7.9 二维高斯函数

高斯函数可以扩展到二维。二维高斯函数将在混合高斯模型中出现。
设输入是二维向量 x = [ x 0 , x 1 ] T \boldsymbol x =[x_0,x_1]^T x=[x0,x1]T,则高斯函数的基本形式为:

y = exp ⁡ { − ( x 0 2 + x 1 2 ) } (4-137) y=\exp \left\{-\left(x_{0}^{2}+x_{1}^{2}\right)\right\}\tag{4-137} y=exp{(x02+x12)}(4-137)

二维高斯函数的图形如图4-33所示,形似一个以原点为中心的同心圆状的吊钟。

在这里插入图片描述

图4-33 一个简单的二维高斯函数

在此基础上,为了能够移动其中心,或使其变细长,这里添加几个参数,得到:

y = a ⋅ exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } (4-138) y=a \cdot \exp \left\{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \Sigma^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\right\}\tag{4-138} y=aexp{21(xμ)TΣ1(xμ)}(4-138)

如此一来, e x p exp exp中就会有向量或矩阵,下面逐个介绍。

首先,参数 μ \mu μ Σ \Sigma Σ表示的是函数的形状。 μ \mu μ是均值向量(中心向量),表示函数分布的中心:

μ = [ μ 0 μ 1 ] T (4-139) \boldsymbol{\mu}=\left[\begin{array}{ll} \mu_{0} & \mu_{1} \end{array}\right]^{\mathrm{T}}\tag{4-139} μ=[μ0μ1]T(4-139)

Σ \Sigma Σ被称为协方差矩阵,是一个如下所示的 2 × 2 2\times 2 2×2矩阵:

Σ = [ σ 0 2 σ 01 σ 01 σ 1 2 ] (4-140) \Sigma=\left[\begin{array}{cc} \sigma_{0}^{2} & \sigma_{01} \\ \sigma_{01} & \sigma_{1}^{2} \end{array}\right]\tag{4-140} Σ=[σ02σ01σ01σ12](4-140)

我们可以给矩阵中的元素 σ 0 2 \sigma_0^2 σ02 σ 1 2 \sigma_1^2 σ12赋一个正值,分别用于调整 x 0 x_0 x0方向和 x 1 x_1 x1方向的函数分布的幅度。对于 σ 01 \sigma_{01} σ01,则赋一个正的或负的实数,用于调整函数分布方向上的斜率。如果是正数,那么函数图形呈向右上方倾斜的椭圆状;如果是负数,则呈向左上方倾斜的椭圆状(设 x 0 x_0 x0为横轴, x 1 x_1 x1为纵轴时的情况)。

虽然我们往式4-138的 e x p exp exp中引入的是向量和矩阵,但变形之后却会变为标量。简单起见,我们设 μ = [ μ 0 , μ 1 ] T = [ 0 , 0 ] T \boldsymbol {\mu}=[\mu_0 ,\mu_1]^T=[0,0]^T μ=[μ0,μ1]T=[0,0]T,然后试着计算 ( x − μ ) T ∑ − 1 ( x − μ ) (\boldsymbol x- \boldsymbol {\mu})^T\sum^{-1}(\boldsymbol x- \boldsymbol {\mu}) (xμ)T1(xμ),可知 e x p exp exp中的值是一个由 x 0 x_0 x0 x 1 x_1 x1构成的二次表达式:

( x − μ ) T Σ − 1 ( x − μ ) = x T Σ − 1 x = [ x 0 x 1 ] ⋅ 1 σ 0 2 σ 1 2 − σ 01 2 [ σ 1 2 − σ 01 − σ 01 σ 0 2 ] [ x 0 x 1 ] = 1 σ 0 2 σ 1 2 − σ 01 2 ( σ 1 2 x 0 2 − 2 σ 01 x 0 x 1 + σ 0 2 x 1 2 ) (4-141) \begin{array}{l} (\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})=\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}\\ =\left[\begin{array}{ll} x_{0} & x_{1} \end{array}\right] \cdot \frac{1}{\sigma_{0}^{2} \sigma_{1}^{2}-\sigma_{01}^{2}}\left[\begin{array}{cc} \sigma_{1}^{2} & -\sigma_{01} \\ -\sigma_{01} & \sigma_{0}^{2} \end{array}\right]\left[\begin{array}{l} x_{0} \\ x_{1} \end{array}\right]\\ =\frac{1}{\sigma_{0}^{2} \sigma_{1}^{2}-\sigma_{01}^{2}}\left(\sigma_{1}^{2} x_{0}^{2}-2 \sigma_{01} x_{0} x_{1}+\sigma_{0}^{2} x_{1}^{2}\right) \end{array}\tag{4-141} (xμ)TΣ1(xμ)=xTΣ1x=[x0x1]σ02σ12σ0121[σ12σ01σ01σ02][x0x1]=σ02σ12σ0121(σ12x022σ01x0x1+σ02x12)(4-141)

a a a也可以看作一个控制函数大小的参数,当用在二维高斯函数中表示概率分布时,我们将其设为:

a = 1 2 π 1 ∣ Σ ∣ 1 / 2 (4-142) a=\frac{1}{2 \pi} \frac{1}{|\Sigma|^{1 / 2}}\tag{4-142} a=2π1∣Σ1/21(4-142)

在进行如上所示的变形后,输入空间的积分值为1,函数可以表示概率分布。

式4-142中的 ∣ Σ ∣ |\Sigma| ∣Σ∣是一个被称为“ Σ \Sigma Σ的矩阵式”的量(把矩阵看作向量,行列式相当于向量的模),当矩阵大小为 2 × 2 2\times2 2×2时, ∣ Σ ∣ |\Sigma| ∣Σ∣的值为:

∣ A ∣ = ∣ a b c d ∣ = a d − c b (4-143) |\boldsymbol{A}|=\left|\begin{array}{ll} a & b \\ c & d \end{array}\right|=a d-c b\tag{4-143} A= acbd =adcb(4-143)

因此, ∣ Σ ∣ |\Sigma| ∣Σ∣可以表示为:

∣ Σ ∣ = σ 0 2 σ 1 2 − σ 01 2 (4-144) |\Sigma|=\sigma_{0}^{2} \sigma_{1}^{2}-\sigma_{01}^{2}\tag{4-144} ∣Σ∣=σ02σ12σ012(4-144)

下面通过Python程序绘制一下函数图形,代码如下:
y = a ⋅ exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } (4-138) y=a \cdot \exp \left\{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \Sigma^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\right\}\tag{4-138} y=aexp{21(xμ)TΣ1(xμ)}(4-138)

a = 1 2 π 1 ∣ Σ ∣ 1 / 2 (4-142) a=\frac{1}{2 \pi} \frac{1}{|\Sigma|^{1 / 2}}\tag{4-142} a=2π1∣Σ1/21(4-142)

# 代码清单 4-5-(1)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
%matplotlib inline# 高斯函数 -----------------------------
def gauss(x, mu, sigma):N, D = x.shapec1 = 1 / (2 * np.pi)**(D / 2)c2 = 1 / (np.linalg.det(sigma)**(1 / 2))  # np.linalg.det():矩阵求行列式(标量)inv_sigma = np.linalg.inv(sigma)           # np.linalg.inv():矩阵求逆c3 = x - muc4 = np.dot(c3, inv_sigma)c5 = np.zeros(N)for d in range(D):c5 = c5 + c4[:, d] * c3[:, d]p = c1 * c2 * np.exp(-c5 / 2)return p

输入数据 x x x N × 2 N\times 2 N×2矩阵,mu是模为2的向量,sigma是 2 × 2 2\times2 2×2矩阵。下面代入适当的数值测试一下gauss(s, mu, sigma)。

# 代码清单 4-5-(2)
x = np.array([[1, 2], [2, 1], [3, 4]])
mu = np.array([1, 2])
sigma = np.array([[1, 0], [0, 1]])
print(gauss(x, mu, sigma))

由上面的结果可知,函数返回了与代入的三个数值相应的返回值。绘制该函数的等高线图形和三维图形的代码如代码如下:

# 代码清单 4-5-(3)
X_range0=[-3, 3]
X_range1=[-3, 3]# 显示等高线 --------------------------------
def show_contour_gauss(mu, sig):xn = 40  # 等高线的分辨率x0 = np.linspace(X_range0[0], X_range0[1], xn)x1 = np.linspace(X_range1[0], X_range1[1], xn)xx0, xx1 = np.meshgrid(x0, x1)x = np.c_[np.reshape(xx0, xn * xn, order='F'), np.reshape(xx1, xn * xn, order='F')]f = gauss(x, mu, sig)f = f.reshape(xn, xn)f = f.Tcont = plt.contour(xx0, xx1, f, 15, colors='k')plt.grid(True)# 三维图形 ----------------------------------
def show3d_gauss(ax, mu, sig):xn = 40  # 等高线的分辨率x0 = np.linspace(X_range0[0], X_range0[1], xn)x1 = np.linspace(X_range1[0], X_range1[1], xn)xx0, xx1 = np.meshgrid(x0, x1)x = np.c_[np.reshape(xx0, xn * xn, order='F'), np.reshape(xx1, xn * xn, order='F')]f = gauss(x, mu, sig)f = f.reshape(xn, xn)f = f.Tax.plot_surface(xx0, xx1, f, rstride=2, cstride=2, alpha=0.3, color='blue', edgecolor='black')# 主处理 -----------------------------------
mu = np.array([1, 0.5])            # (A)
sigma = np.array([[2, 1], [1, 1]]) # (B)Fig = plt.figure(1, figsize=(7, 3))
Fig.add_subplot(1, 2, 1)
show_contour_gauss(mu, sigma)
plt.xlim(X_range0)
plt.ylim(X_range1)
plt.xlabel('$x_0$', fontsize=14)
plt.ylabel('$x_1$', fontsize=14)Ax = Fig.add_subplot(1, 2, 2, projection='3d')
show3d_gauss(Ax, mu, sigma)
Ax.set_zticks([0.05, 0.10])
Ax.set_xlabel('$x_0$', fontsize=14)
Ax.set_ylabel('$x_1$', fontsize=14)
Ax.view_init(40, -100)
plt.show()

输出结果:
在这里插入图片描述
运行程序之后,可以得到如图4-37所示的图形。图形分布的中心为程序设定的中心,位于(1, 0.5)((A))。此外,由于 σ 01 = 1 \sigma_{01}=1 σ01=1,所以图形分布呈向右上倾斜的形状(( B B B))。

在这里插入图片描述

图4-34—般的二维高斯函数

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

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

相关文章

关于个人职业选择

职业选择&#xff0c;一直是个老生常谈的话题。这并不是一个容易做的决定。 让我们来看看AI怎么说。 首先是方向性的回答&#xff1a; 然后是一些具体的回答 我个人比较倾向于深耕网络安全。这是一个很有趣也是一个持续发展着的领域。 不知道关于这个事情你怎么看&#xff0…

创建vue项目:vue脚手架安装、vue-cli安装,vue ui界面创建vue工程(vue2/vue3),安装vue、搭建vue项目开发环境(保姆级教程二)

今天讲解 Windows 如何利用脚手架创建 vue 工程&#xff0c;以及 vue ui 图形化界面搭建 vue 开发环境&#xff0c;这是这个系列的第二章&#xff0c;有什么问题请留言&#xff0c;请点赞收藏&#xff01;&#xff01;&#xff01; 文章目录 1、安装vue-cli脚手架2、vue ui创建…

智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑马算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

R语言,table()函数实现统计每个元素出现的频数+并将最终统计频数结果转换成dataframe数据框形式

在 R中&#xff0c;要统计dataframe数据框中每个元素出现的频数&#xff0c;可以使用table()函数。以下是一个示例&#xff1a; 目录 一、创建数据 二、统计第一列每个元素出现的频数 三、统计第二列每个元素出现的频数 四、将频数结果转换为数据框&#xff0c;并改列名 一…

ambari hive on Tez引擎一直卡住

hive on tez使用./bin/hive启动后一直卡住&#xff0c;无法进入命令行 使用TEZ作为Hive默认执行引擎时&#xff0c;需要在调用Hive CLI的时候启动YARN应用&#xff0c;预分配资源&#xff0c;这需要花一些时间&#xff0c;而使用MapReduce作为执行引擎时是在执行语句的时候才会…

人工智能_机器学习063_SVR支持向量机_回归拟合天猫双十一销量方程---人工智能工作笔记0103

之前我们用线性回归做过天猫双十一销量预测的数据,现在我们再来用SVR支持向量机来做一下 首先上面是给出了销量,对应2009年到2019年的,销售额 可以看到: X=np.arange(2009,2020)-2008 统一减去2008的话看起来数据比较简单了 y=np.array([0.5,9.36,52,191,350,571,912,1207,1…

题目:快速幂(蓝桥OJ 1514)

题目描述&#xff1a; 解题思路&#xff1a; 使用快速幂模板&#xff08;倍增思想&#xff09;。 题解&#xff1a; #include<bits/stdc.h> using namespace std; using ll long long;ll ksm(ll a, ll b, ll c)//注意&#xff1a;需要取模的地方都取模c&#xff0c;且…

使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境

介绍 在不断发展的科技世界中&#xff0c;快速构建高质量的软件至关重要。在真实环境中测试应用程序是及早发现和修复错误的关键。但是&#xff0c;在真实环境中设置 CI/CD 流水线进行测试可能既棘手又昂贵。 Kubernetes 是一个流行的容器编排平台&#xff0c;提供临时环境解决…

【STM32】蓝牙氛围灯

Docs 一、项目搭建和开发流程 一、项目需求和产品定义 1.需求梳理和产品定义 一般由甲方公司提出&#xff0c;或由本公司市场部提出 需求的重点是&#xff1a;这个产品究竟应该做成什么样&#xff1f;有哪些功能&#xff1f;具体要求和参数怎样&#xff1f;此外还要考虑售价…

【postgresql】ERROR: INSERT has more expressions than target columns

执行下面sql insert into apply_account_cancellation3 select * from pply_account_cancellation; 返回下面错误信息 insert into apply_account_cancellation3 select * from apply_account_cancellation > ERROR: INSERT has more expressions than target colu…

如何将 MySQL 数据库转换为 SQL Server

本文解释了为什么组织希望将其 MySQL 数据库转换为 Microsoft SQL 数据库。本文接着详细介绍了尝试转换之前需要记住的事项以及所涉及的方法。专业的数据库转换器工具将帮助您快速将 MySQL 数据库记录转换为 MS SQL Server。 在继续之前&#xff0c;我们先讨论一下 MySQL 到 M…

新能源汽车生产污废水需要哪些工艺及设备

新能源汽车的快速发展带来了许多环境问题&#xff0c;其中之一就是生产过程中产生的污废水。由于新能源汽车的生产过程与传统汽车有所不同&#xff0c;因此需要采用特定的工艺和设备来处理和处理这些废水。 首先&#xff0c;新能源汽车生产过程中产生的污废水主要来自洗涤和冷却…

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在&#xff0c;那么地图视角是如何让实现的呢&#xff1f; 这一期教大家制作一个简易的小地图。 &#x1f496;点关注&#xff0c;不迷路。 老样子&#xff0c;我们还…

C++ Qt开发:LineEdit单行输入组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍LineEdit单行输入框组件的常用方法及灵活运用…

【NR技术】NR NG-RAN整体架构 -功能划分(三)

1 概述 NG-RAN节点包括: gNB&#xff0c;向终端提供NR用户平面和控制平面协议终端;ng-eNB&#xff0c;向终端提供E-UTRA用户平面和控制平面的协议终端。gNB和ng- eNB通过Xn接口相互连接。gnb和NG- eNB也通过NG接口连接到5GC&#xff0c;更具体地说&#xff0c;通过NG-C接口连…

深入浅出:HTTPS单向与双向认证及证书解析20231208

介绍: 网络安全的核心之一是了解和实施HTTPS认证。本文将探讨HTTPS单向认证和双向认证的区别&#xff0c;以及SSL证书和CA证书在这些过程中的作用&#xff0c;并通过Nginx配置实例具体说明。 第一部分&#xff1a;HTTPS单向认证 定义及工作原理&#xff1a;HTTPS单向认证是一…

网络游戏APP备案|游戏

网络游戏APP备案|游戏 网络游戏备案分析需要备案原因&#xff08;个人看法&#xff09;对小公司对大公司 总结 网络游戏备案分析 相信做网络游戏的伙伴们在23年都收到了各个平台的公告&#xff0c;网络游戏需要进行APP的备案。也就是说网路游戏现在安卓平台也不是你想上架测试…

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项一阶段样题一

2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防…

python——第十七天

方法重写(overwrite) 、方法覆盖(override )&#xff1a;在继承的基础上&#xff0c;子类继承了父类的方法&#xff0c;如果不能满足自己使用&#xff0c;我们就可以重写或覆盖该方法 函数重载(overload)&#xff1a; 在强数据类型的编程语言中(如Java、C、C等等): 函数名称…

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列 1、队列&#xff1a;先进先出 队列是项的有序集合&#xff0c;其中&#xff0c;添加新项的一端称为队尾&#xff0c;移除项的另一端称为队首。一个元素在从队尾进入队列后&#xff0c;就会一直向队首移动&#xff0c;直到…