方向导数和梯度

方向导数和梯度

  • 1 导数的回忆
  • 2 偏导数及其向量形式
    • 偏导数的几何意义
    • 偏导数的向量形式
  • 3 方向导数
    • 向量形式
    • 几何意义
    • 方向导数和偏导的关系
  • 4 梯度
  • 5 梯度下降算法

1 导数的回忆

导数的几何意义如图所示:

导数图像
P 0 P_{0} P0点不断接近 P P P时,导数如下定义:
f ′ ( x 0 ) = lim ⁡ △ x → 0 △ y △ x = lim ⁡ △ x → 0 f ( x 0 + △ x ) − f ( x 0 ) △ x {f}'(x_{0})=\lim\limits_{△x→0}\frac{△y}{△x} =\lim\limits_{△x→0}\frac{f(x_{0}+△x)-f(x_{0})}{△x} f(x0)=x0limxy=x0limxf(x0+x)f(x0)

2 偏导数及其向量形式

偏导数的几何意义

x x x的偏导数定义如下:
∂ f ∂ x ( x 0 , y 0 ) = lim ⁡ △ x → 0 f ( x 0 + △ x , y 0 ) − f ( x 0 , y 0 ) △ x \frac{\partial f}{\partial x}(x_{0},y_{0})=\lim\limits_{△x→0} \frac{f(x_{0}+△x,y_{0})-f(x_{0},y_{0})}{△x} xf(x0,y0)=x0limxf(x0+x,y0)f(x0,y0)
如图所示, M 0 ( x 0 , y 0 , f ( x 0 , y 0 ) ) M_{0}(x_{0},y{0},f(x_{0},y_{0})) M0(x0,y0,f(x0,y0))是曲线 z = f ( x , y ) z=f(x,y) z=f(x,y)的一点,过 M 0 M_{0} M0作平面 y = y 0 y=y_{0} y=y0,截此曲面得一曲线,此曲线的方程为: z = f ( x , y 0 ) z=f(x,y_{0}) z=f(x,y0),则上述对 x x x的偏导数就是在点 M 0 M_{0} M0处的切线 M 0 T x M_{0}T_{x} M0Tx对x轴的斜率。对 y y y的偏导数的几何意义同理。
偏导数

偏导数的向量形式

为了等一下方便理解方向导数,将上述的偏导数表示成向量形式。
a ⃗ = [ x 0 y 0 ] \vec{a}=\begin{bmatrix}x_{0}\\ y_{0}\end{bmatrix} a =[x0y0],则对 x x x的偏导数为:
∂ f ∂ x ( a ⃗ ) = lim ⁡ h → 0 f ( a ⃗ + h i ^ ) − f ( a ⃗ ) h \frac{\partial f}{\partial x}(\vec{a})=\lim\limits_{h→0} \frac{f(\vec{a}+h\hat{i})-f(\vec{a})}{h} xf(a )=h0limhf(a +hi^)f(a )

  • 其中 i ^ = [ 1 0 ] \hat{i}=\begin{bmatrix}1\\ 0\end{bmatrix} i^=[10]

3 方向导数

向量形式

从偏导数的向量形式可知:当 i ^ \hat{i} i^方向改变时,就产生了方向导数。
方向导数的定义如下:
∇ v ⃗ f ( a ⃗ ) = ∂ f ∂ v ⃗ ( a ⃗ ) = lim ⁡ h → 0 f ( a ⃗ + h v ⃗ ) − f ( a ⃗ ) h \nabla_{\vec{v}}f(\vec{a})=\frac{\partial f}{\partial \vec{v}}(\vec{a})=\lim\limits_{h→0} \frac{f(\vec{a}+h\vec{v})-f(\vec{a})}{h} v f(a )=v f(a )=h0limhf(a +hv )f(a )

  • 这种定义有一种问题,假设 v ⃗ \vec{v} v 变为原来的两倍,但分母不变,则实际上方向导数也会变成2倍。

如果要把方向导数表示成该方向的斜率,则应该用如下定义:
∇ v ⃗ f ( a ⃗ ) = ∂ f ∂ v ⃗ ( a ⃗ ) = lim ⁡ h → 0 f ( a ⃗ + h v ⃗ ) − f ( a ⃗ ) h ∣ v ⃗ ∣ \nabla_{\vec{v}}f(\vec{a})=\frac{\partial f}{\partial \vec{v}}(\vec{a})=\lim\limits_{h→0} \frac{f(\vec{a}+h\vec{v})-f(\vec{a})}{h|\vec{v}|} v f(a )=v f(a )=h0limhv f(a +hv )f(a )

  • 在该定义下,表示的是函数在某点沿着 a ⃗ \vec{a} a 方向上的导数,即斜率

几何意义

方向导数的非向量形式如下:
e l = ( c o s α , c o s β ) e_{l}=(cos\alpha,cosβ) el=(cosα,cosβ)是与 l l l同方向的单位向量,设射线 l l l P P P的坐标为 P = ( x 0 + t c o s α , y 0 + t c o s β ) P=(x_{0}+tcos\alpha,y_{0}+tcosβ) P=(x0+tcosα,y0+tcosβ),此时如下图所示:
图
此时函数增量与距离 ∣ P P 0 ∣ = t |PP_{0}|=t PP0=t的比值为:
f ( x 0 + t c o s α , y 0 + t c o s β ) − f ( x 0 , y 0 ) t \frac{f(x_{0}+tcos\alpha,y_{0}+tcosβ)-f(x_{0},y_{0})}{t} tf(x0+tcosα,y0+tcosβ)f(x0,y0)
P P P沿着 l l l趋于 P 0 P_{0} P0时,若极限存在,则称为函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 P_{0} P0沿方向 l l l的的方向导数,即上面向量形式的第二种定义(只不过这里用了非向量形式),如下:
∂ f ∂ l ∣ ( x 0 , y 0 ) = lim ⁡ t → 0 + f ( x 0 + t c o s α , y 0 + t c o s β ) − f ( x 0 , y 0 ) t \frac{\partial f}{\partial l}\vert_{(x_{0},y_{0})}=\lim\limits_{t→0^{+}}\frac{f(x_{0}+tcos\alpha,y_{0}+tcosβ)-f(x_{0},y_{0})}{t} lf(x0,y0)=t0limtf(x0+tcosα,y0+tcosβ)f(x0,y0)
其几何意义如下图所示:如果要求A点在紫色向量方向上的斜率(红色线圈出来的),则可用方向导数
方向导数

方向导数和偏导的关系

定理: 如果函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 ( x 0 , y 0 ) P_{0}(x_{0},y_{0}) P0(x0,y0)可微分,那么函数在该点沿任一方向 l l l的方向导数存在,且有
∂ f ∂ l ∣ ( x 0 , y 0 ) = f x ( x 0 , y 0 ) c o s α + f y c o s β \frac{\partial f}{\partial l}\vert_{(x_{0},y_{0})}=f_{x}(x_{0},y_{0})cos\alpha+f_{y}cosβ lf(x0,y0)=fx(x0,y0)cosα+fycosβ
其中 c o s α cos\alpha cosα c o s β cosβ cosβ是方向 l l l的方向余弦

证明:由函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 ( x 0 , y 0 ) P_{0}(x_{0},y_{0}) P0(x0,y0)可微分可得:
f ( x 0 + △ x , y 0 + △ y ) − f ( x 0 , y 0 ) = f x ( x 0 , y 0 ) △ x + f y △ y + o ( △ x 2 + △ y 2 ) f(x_{0}+△x,y_{0}+△y)-f(x_{0},y_{0})=f_{x}(x_{0},y_{0})△x+f_{y}△y+o(\sqrt{△x^{2}+△y^{2} }) f(x0+x,y0+y)f(x0,y0)=fx(x0,y0)x+fyy+o(x2+y2 )
由上述可知: △ x = t c o s α , △ y = t c o s β △x=tcos\alpha,△y=tcosβ x=tcosα,y=tcosβ,则有: △ x 2 + △ y 2 = t \sqrt{△x^{2}+△y^{2} }=t x2+y2 =t
从而有:
lim ⁡ t → 0 + f ( x 0 + t c o s α , y 0 + t c o s β ) − f ( x 0 , y 0 ) t = lim ⁡ t → 0 + f x ( x 0 , y 0 ) t c o s α + f y t c o s β + o ( t ) t = f x ( x 0 , y 0 ) c o s α + f y c o s β \begin {aligned} {} \lim\limits_{t→0^{+}}\frac{f(x_{0}+tcos\alpha,y_{0}+tcosβ)-f(x_{0},y_{0})}{t}& =\lim\limits_{t→0^{+}}\frac{f_{x}(x_{0},y_{0})tcos\alpha+f_{y}tcosβ+o(t)}{t} \\&=f_{x}(x_{0},y_{0})cos\alpha+f_{y}cosβ \end {aligned} t0limtf(x0+tcosα,y0+tcosβ)f(x0,y0)=t0limtfx(x0,y0)tcosα+fytcosβ+o(t)=fx(x0,y0)cosα+fycosβ
相当于方向导数是偏导数的线性组合

4 梯度

在二元函数情况下,设函数 f ( x , y ) f(x,y) f(x,y)在平面区域 D D D内具有一阶连续偏导数,则对于每一点 P 0 ( x 0 , y 0 ) ∈ D P_{0}(x_{0},y_{0})∈D P0(x0,y0)D,都存在一个梯度,记作 grad f ( x 0 , y 0 ) \textbf{grad}f(x_{0},y_{0}) gradf(x0,y0) ▽ f ( x 0 , y 0 ) ▽f(x_{0},y_{0}) f(x0,y0)
grad f ( x 0 , y 0 ) = ▽ f ( x 0 , y 0 ) = [ ∂ f ∂ x ∂ f ∂ y ] \textbf{grad}f(x_{0},y_{0})=▽f(x_{0},y_{0})= \begin{bmatrix}\frac{\partial f}{\partial x} \\ \\ \frac{\partial f}{\partial y}\end{bmatrix} gradf(x0,y0)=f(x0,y0)= xfyf
因此,假设函数 f ( x , y ) f(x,y) f(x,y)在点 P 0 ( x 0 , y 0 ) P_{0}(x_{0},y_{0}) P0(x0,y0)可微分, e l = ( c o s α , c o s β ) e_{l}=(cos\alpha,cosβ) el=(cosα,cosβ)是与方向 l l l同向的方向向量,则方向导数和梯度的关系是:
∂ f ∂ l ∣ ( x 0 , y 0 ) = f x ( x 0 , y 0 ) c o s α + f y c o s β = ▽ f ( x 0 , y 0 )   ⋅   e l = ∣ ▽ f ( x 0 , y 0 ) ∣   ∣ e l ∣   c o s θ = ∣ ▽ f ( x 0 , y 0 ) ∣   c o s θ \begin {aligned} {} \frac{\partial f}{\partial l}\vert_{(x_{0},y_{0})}& = f_{x}(x_{0},y_{0})cos\alpha+f_{y}cosβ \\&=▽f(x_{0},y_{0}) \ \bm{\cdot} \ e_{l} \\&=|▽f(x_{0},y_{0})| \ |e_{l}| \ cos\theta \\&=|▽f(x_{0},y_{0})|\ cos\theta \end {aligned} lf(x0,y0)=fx(x0,y0)cosα+fycosβ=f(x0,y0)  el=∣▽f(x0,y0) el cosθ=∣▽f(x0,y0) cosθ
其中, θ \theta θ是向量 ▽ f ( x 0 , y 0 ) ▽f(x_{0},y_{0}) f(x0,y0)与向量 e l e_{l} el所成夹角,因此可以得出下述结论:

  • θ = 0 \theta=0 θ=0,向量 ▽ f ( x 0 , y 0 ) ▽f(x_{0},y_{0}) f(x0,y0)与向量 e l e_{l} el方向相同,此时方向导数最大,函数 f ( x , y ) f(x,y) f(x,y)增长最快
  • θ = π \theta=π θ=π,向量 ▽ f ( x 0 , y 0 ) ▽f(x_{0},y_{0}) f(x0,y0)与向量 e l e_{l} el方向相反,此时方向导数最小,函数 f ( x , y ) f(x,y) f(x,y)减少最快
  • θ = π 2 \theta=\frac{π}{2} θ=2π,向量 ▽ f ( x 0 , y 0 ) ▽f(x_{0},y_{0}) f(x0,y0)与向量 e l e_{l} el方向正交,函数 f ( x , y ) f(x,y) f(x,y)变化率为0
  • 综上,沿着梯度方向函数增长最快

5 梯度下降算法

梯度下降法(Gradient Descent)是一种用于寻找函数极小值的一阶迭代优化算法,又称为最速下降(Steepest Descent)。以下是梯度下降的基本公式:
θ ← θ − η ∂ L ( θ ) ∂ θ \theta \leftarrow \theta -η\frac{\partial L(\theta)}{\partial \theta } θθηθL(θ)
可以看出:

  • L ( θ ) L(\theta) L(θ)是关于 θ \theta θ的损失函数
  • η η η是学习率,称为梯度下降的步长,
  • 梯度下降法是让方向导数最小时做迭代

举一个例子:设 L ( θ ) = θ 2 L(\theta)=\theta^{2} L(θ)=θ2,则梯度 ▽ L ( θ ) = ∂ L ( θ ) ∂ θ = 2 θ ▽L(\theta)=\frac{\partial L(\theta)}{\partial \theta }=2\theta L(θ)=θL(θ)=2θ;设学习率为 η = 0.2 η=0.2 η=0.2;设初始值为 ( θ 0 , L ( θ 0 ) ) = ( 10 , 100 ) (\theta_{0},L(\theta_{0}))=(10,100) (θ0,L(θ0))=(10,100),此时梯度为: ▽ L ( θ 0 ) = 2 θ 0 = 20 ▽L(\theta_{0})=2\theta_{0}=20 L(θ0)=2θ0=20

  • 更新 θ \theta θ θ 1 ← θ 0 − η ∂ L ( θ 0 ) ∂ θ 0 = 10 − 0.2 × 20 = 6 \theta_{1} \leftarrow \theta_{0} -η\frac{\partial L(\theta_{0})}{\partial \theta_{0} } = 10-0.2×20=6 θ1θ0ηθ0L(θ0)=100.2×20=6
  • 重复上述步骤,直至 θ \theta θ收敛

代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 定义损失函数 y = x^2
def f(x):
    return x**2

# 梯度下降函数
def gradient_descent(x, eta):
    # 计算斜率
    slope = 2 * x
    # 更新 x 的值
    x_out = x - eta * slope
    return x_out, slope

# 主程序
def main():
    # 初始化参数
    x_data = np.linspace(-10, 10, 1000)  # x 范围
    LRate = 0.2  # 学习率
    slope_thresh = 0.0001  # 斜率阈值

    # 绘制损失函数图像
    plt.plot(x_data, f(x_data), 'c', linewidth=2)
    plt.title('y = x^2 (learning rate = 0.2)')
    plt.xlabel('x')
    plt.ylabel('y = x^2')
    plt.grid(True)

    # 初始点设置为 (10, f(10))
    x = 10
    y = f(10)
    plt.plot(x, y, 'r*')

    # 开始梯度下降迭代
    slope = float('inf')  # 初始斜率设置为无穷大
    while abs(slope) > slope_thresh:
        x_new, slope = gradient_descent(x, LRate)
        y_new = f(x_new)
        # 绘制当前点到更新后点的连线
        plt.plot([x, x_new], [y, y_new], 'k--', linewidth=1)
        # 绘制点
        plt.plot(x_new, y_new, 'r*')
        plt.legend(['y = x^2', 'Gradient descent path'])
        plt.draw()
        plt.pause(0.2)  # 暂停一小段时间,使得动态图像可见
        x = x_new
        y = y_new

    plt.show()


# 当这个 .py 文件被直接运行时(作为主程序),执行 main() 函数;
# 当这个 .py 文件被导入到其他模块中时,不执行 main() 函数,因为 __name__ 的值不是 '__main__'。
if __name__ == '__main__':
    main()

应尽可能选择适中的学习率,过大会震荡,过小迭代次数会过多,如下所示,学习率为0.2更好。
当学习率 η = 0.2 η=0.2 η=0.2时,图像如下:学习率0.2
当学习率 η = 0.9 η=0.9 η=0.9时,图像如下:
学习率0.9
当学习率 η = 0.01 η=0.01 η=0.01时,图像如下:
学习率0.01

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 中使用element-ui实现锚点定位表单

效果图&#xff1a; 代码&#xff1a; html代码&#xff1a; <div class"content-left"><el-tabs :tab-position"left" tab-click"goAnchor"><el-tab-pane v-for"(item,index) in anchorNameList"v-anchor-scroll:ke…

LeetCode 60.排序排列(dfs暴力)

给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; "123""132""213""231""312""321" 给定…

基于RSA的数字签名设计与实现

闲着没事把大三的实验发一下 这里用的技术和老师要求的略有不同但大体相同 1. RSA算法简介 公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中出现的问题.另外,随着电子商务的发展,网络…

transformer模型学习路线_transformer训练用的模型

Transformer学习路线 完全不懂transformer&#xff0c;最近小白来入门一下&#xff0c;下面就是本菜鸟学习路线。Transformer和CNN是两个分支&#xff01;&#xff01;因此要分开学习 Transformer是一个Seq2seq模型&#xff0c;而Seq2seq模型用到了self-attention机制&#xf…

Python | Leetcode Python题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dicts Counter(s)dictt Counter(t) if list(dicts.values()) ! list(dictt.values()):return Falsefor i in range(len(s)):inds list(dicts.keys()).index(s…

【postgresql】 数据类型

数字类型 名字存储尺寸描述范围smallint2字节小范围整数-32768 ~32767integer4字节整数的典型选择-2147483648 ~ 2147483647bigint8字节大范围整数-9223372036854775808 ~ 9223372036854775807decimal可变用户指定精度&#xff0c;精确最高小数点前131072位&#xff0c;以及小…

python sklearn机械学习模型-回归

&#x1f308;所属专栏&#xff1a;【机械学习】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您…

使用SpringBoot整合Servlet

一、SpringBoot和Servlet的整合 1、用注解WebServlet配置Servlet映射 创建一个SpringBoot的web工程&#xff0c;在工程用创建一个Servlet 2、在SpringBoot的启动类上加注解ServletComponentScan 二、额外的方式 1、不使用WebServlet配置Servlet映射 创建一个SpringBoot工…

数据资产治理的智能化探索:结合云计算、大数据、人工智能等先进技术,探讨数据资产治理的智能化方法,为企业提供可靠、高效的数据资产解决方案,助力企业提升竞争力

一、引言 在信息化时代&#xff0c;数据已成为企业最重要的资产之一。随着云计算、大数据、人工智能等先进技术的飞速发展&#xff0c;数据资产治理面临着前所未有的机遇与挑战。本文旨在探讨如何结合这些先进技术&#xff0c;实现数据资产治理的智能化&#xff0c;为企业提供…

零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)

接前一篇文章&#xff1a;零知识学习之DPDK与RDMA&#xff08;2&#xff09;—— 认识DPDK&#xff08;2&#xff09; 本文内容参考&#xff1a; 《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社 https://blog.51cto.com/u_15301988/5181201 特此致谢&…

微软账户和本地账户有什么区别?如何切换登录账户?

Windows 操作系统是目前世界上比较流行的操作系统之一&#xff0c;在使用 Windows 系统的时候都需要我们进行登录&#xff0c;其中我们可以使用微软账户或者本地账户进行登录&#xff0c;那本地账户和微软账户有什么区别&#xff1f;下面就带大家了解一下微软账户和本地账户。 …

【Threejs进阶教程-着色器篇】2. Uniform的基本用法与Uniform的调试

Uniform的基本用法与Uniform的调试 关于本Shader教程优化上一篇的效果优化光栅栏高度让透明度和颜色变的更平滑pow()函数借助数学工具更好的理解函数 Unifoms简介编写uniforms修改片元着色器代码借助lil.gui调试uniforms使用uniform控制颜色继续在uniforms添加颜色在着色器中接…

git配置ssh-keygen -t rsa -c“xxxx@xxxx.com.cn出现Too many arguments.解决办法

git配置ssh-keygen -t rsa -c"xxxxxxxx.com.cn出现Too many arguments.解决办法 问题描述 配置Git公钥私钥时候输入命令ssh-keygen -t rsa -c"xxxxxxxx.com.cn出现Too many arguments. 解决办法&#xff1a; 提示输入的参数格式不正确&#xff0c;需要注意这几个地…

甄选版“论软件系统架构评估”,软考高级论文,系统架构设计师论文

论文真题 对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,…

HexPlane: A Fast Representation for Dynamic Scenes(总结图)

图1。用于动态三维场景的 Hex刨面。我们没有从深度 MLP 中回归颜色和不透明度&#xff0c;而是通过 HexPlann 显式地计算时空点的特征。配对一个微小的 MLP&#xff0c;它允许以上100倍加速匹配的质量。 图2。方法概述。Hex刨包含六个特征平面&#xff0c;跨越每对坐标轴(例如…

四个Python代码片段,全面掌握下划线 “_”的妙用!

在Python的世界里&#xff0c;下划线“_”不仅是一个简单的符号&#xff0c;它还承载了许多编程的小技巧&#xff0c;可以让你的编码工作变得更加轻松和高效。 1、快速回顾&#xff1a;下划线在控制台的神秘力量 当你在Python控制台进行连续计算时&#xff0c;知道如何快速引…

【C语言】顺序表经典算法

本文介绍的是两道顺序表经典算法题目。 移除元素 &#xff08;来源&#xff1a;LeetCode&#xff09; 题目 分析 我们很容易想到的办法是去申请一个新的数组&#xff0c;遍历原数组不等于val就把它拿到新数组里。但是题目的要求是不使用额外空间&#xff0c;所以这种方法我们…

【Koa】KOA 基础-掌握基于koa2搭建web应用的基础

目录 KOA 基础框架介绍与环境搭建koa2 基本介绍Node.JS 环境安装创建 Hello World 程序 Web 应用开发基础处理get请求参数处理post请求参数响应一个页面处理静态资源 中间件基本概念和执行过程中间件概念理解Koa 中间件执行模型-洋葱圈模型Koa洋葱圈设计理解 用 koa-body 处理 …

Tekla Structures钢结构详图设计软件下载;Tekla Structures高效、准确的合作平台

Tekla Structures&#xff0c;它不仅集成了先进的三维建模技术&#xff0c;还融入了丰富的工程实践经验&#xff0c;为设计师、工程师和建筑商提供了一个高效、准确的合作平台。 在建筑项目的整个生命周期中&#xff0c;Tekla Structures都发挥着举足轻重的作用。从规划阶段开始…

朋友圈运营必备!一键转发和自动转发轻松搞定!

你还在手动发布多个微信号的朋友圈吗&#xff1f; 现在&#xff0c;就教你一招&#xff0c;让你轻松实现一键转发和自动转发朋友圈&#xff01; 首先&#xff0c;我们需要在个微管理系统上登录自己的微信号&#xff0c;以便进行统一管理。这个系统可以多个微信号同时登录&…