基于梯度下降算法的无约束函数极值问题求解

news2024/11/26 9:46:53

基于梯度下降算法的无约束函数极值问题求解

  • 1 知识预警
    • 1.1导数
    • 1.2偏导数
    • 1.3方向导数
    • 1.4梯度
  • 2 梯度下降算法
  • 3 无约束函数极值问题求解
    • 3.1 算例1
      • 3.1.1 Python编程求解
      • 3.1.2 求解结果与可视化
    • 3.2 算例2 Rosenbrock函数
      • 3.2.1 Python编程求解
      • 3.2.2 求解结果与可视化

1 知识预警

1.1导数

导数(Derivative),也叫导函数值。又名微商,是微积分中的重要基础概念。
在这里插入图片描述

导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率。导数的本质是通过极限的概念对函数进行局部的线性逼近。例如在运动学中,物体的位移对于时间的导数就是物体的瞬时速度。

对于一条直线来说,求该直线的斜率就是找到该直线上两个点 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2),分别求出两点在 y y y x x x上的增量。因此斜率就是 y y y的改变量比上 x x x的改变量,即 k = tan ⁡ θ = Δ x Δ y = y 2 − y 1 x 2 − x 1 k=\tan\theta =\frac{\Delta x}{\Delta y}=\frac{y_2-y_1}{x_2-x_1} k=tanθ=ΔyΔx=x2x1y2y1

对于不是直线该如何求斜率呢?因为曲线我们是不能笼统的随意找出两点,从而像直线一样求出它的斜率,而是以直代曲,近似的求出曲线在某一点的斜率。我们用的是该点的瞬时变化率,也就是求出该点处切线的斜率。

1.2偏导数

定义:设函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的某一领域内有定义,当 y y y固定在 y 0 y_0 y0,而 x x x x 0 x_0 x0处有增量时,相应地函数有增量: f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) f(x_0+\Delta x,y_0)-f(x_0,y_0) f(x0+Δx,y0)f(x0,y0),如果 lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x \lim_{\Delta x \rightarrow 0 \frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x}} limΔx0Δxf(x0+Δx,y0)f(x0,y0)存在,则称此极限为函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处对 x x x地偏导数,记为 ∂ z ∂ x ∣ ( x 0 , y 0 ) \frac{\partial z}{\partial x}|_{(x_0,y_0)} xz(x0,y0) ∂ f ∂ x ∣ ( x 0 , y 0 ) \frac{\partial f}{\partial x}|_{(x_0,y_0)} xf(x0,y0) z x ( x 0 , y 0 ) z_x(x_0,y_0) zx(x0,y0) f x ( x 0 , y 0 ) f_x(x_0,y_0) fx(x0,y0),即 f x ( x 0 , y 0 ) = lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x = d d x f ( x , y 0 ) ∣ x = x 0 f_x(x_0,y_0)=\lim_{\Delta x \rightarrow 0 \frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x}}= \frac {\mathrm{d}}{\mathrm{d} x}f(x,y_0)|_{x=x_0} fx(x0,y0)=limΔx0Δxf(x0+Δx,y0)f(x0,y0)=dxdf(x,y0)x=x0

同理,可定义函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处对 y y y的偏导数,为 lim ⁡ Δ y → 0 f ( x 0 , y 0 + Δ y ) − f ( x 0 , y 0 ) Δ y \lim_{\Delta y \rightarrow 0}{ \frac{f(x_0,y_0+\Delta y)-f(x_0,y_0)}{\Delta y}} limΔy0Δyf(x0,y0+Δy)f(x0,y0),记为 ∂ z ∂ y ∣ ( x 0 , y 0 ) \frac{\partial z}{\partial y}|_{(x_0,y_0)} yz(x0,y0) ∂ f ∂ y ∣ ( x 0 , y 0 ) \frac{\partial f}{\partial y}|_{(x_0,y_0)} yf(x0,y0) z y ( x 0 , y 0 ) z_y(x_0,y_0) zy(x0,y0) f y ( x 0 , y 0 ) f_y(x_0,y_0) fy(x0,y0),即 f x y ( x 0 , y 0 ) = lim ⁡ Δ y → 0 f ( x 0 , y 0 + Δ y ) − f ( x 0 , y 0 ) Δ y = d d y f ( x 0 , y ) ∣ y = y 0 f_xy(x_0,y_0)=\lim_{\Delta y \rightarrow 0}{ \frac{f(x_0 ,y_0+\Delta y)-f(x_0,y_0)}{\Delta y}}= \frac {\mathrm{d}}{\mathrm{d} y}f(x_0,y)|_{y=y_0} fxy(x0,y0)=limΔy0Δyf(x0,y0+Δy)f(x0,y0)=dydf(x0,y)y=y0

如果函数 z = f ( x , y ) z=f(x,y) z=f(x,y)在区域D内任意一点(x,y)处对x的偏导数都存在,那么这个偏导数就是x、y的函数,它就称为函数 z = f ( x , y ) z=f(x,y) z=f(x,y)对自变量x的偏导函数,简称偏导数,记作 ∂ z ∂ x \frac{ \partial z}{ \partial x} xz ∂ f ∂ x \frac{ \partial f}{ \partial x} xf z x z_x zx f x ( x , y ) f_x(x,y) fx(x,y)

同理,可以定义函数 z = f ( x , y ) z=f(x,y) z=f(x,y)对自变量y的偏导数,记作 ∂ z ∂ y \frac{ \partial z}{ \partial y} yz ∂ f ∂ y \frac{ \partial f}{ \partial y} yf z y z_y zy f y ( x , y ) f_y(x,y) fy(x,y)

偏导数的概念可以推广到二元以上函数,如u=f(x,y,z)在(x,y,z)处:
f x ( x , y , z ) = lim ⁡ Δ x → 0 f ( x + Δ x , y , z ) − f ( x , y , z ) Δ x f_x(x,y,z) = \lim_{\Delta x \rightarrow 0} \frac{f(x+\Delta x,y,z) - f(x,y,z)}{\Delta x} fx(x,y,z)=Δx0limΔxf(x+Δx,y,z)f(x,y,z) f x ( x , y , z ) = lim ⁡ Δ y → 0 f ( x , y + Δ y , z ) − f ( x , y , z ) Δ y f_x(x,y,z) = \lim_{\Delta y \rightarrow 0} \frac{f(x,y+\Delta y,z) - f(x,y,z)}{\Delta y} fx(x,y,z)=Δy0limΔyf(x,y+Δy,z)f(x,y,z) f x ( x , y , z ) = lim ⁡ Δ x z → 0 f ( x , y , z + Δ z ) − f ( x , y , z ) Δ z f_x(x,y,z) = \lim_{\Delta xz \rightarrow 0} \frac{f(x,y,z+\Delta z) - f(x,y,z)}{\Delta z} fx(x,y,z)=Δxz0limΔzf(x,y,z+Δz)f(x,y,z)

【注】偏导数只能表示多元函数沿某个坐标轴方向的导数,如对于二元函数 f ( x , y ) = x 2 + y 2 f(x,y)=x^2+y^2 f(x,y)=x2+y2 ∂ z ∂ x = 2 x \frac{\partial z}{\partial x}=2x xz=2x表示函数沿着x轴方向的导数; ∂ z ∂ y = 2 y \frac{\partial z}{\partial y}=2y yz=2y表示函数沿着y轴方向的导数;

1.3方向导数

除了沿坐标轴方向上的导数,多元函数在非坐标轴方向上也可以求导数,这种导数称为方向导数。很容易发现,多元函数在特定点的方向导数有无穷多个,表示函数值在各个方向上的增长速度。一个很自然的问题是:在这些方向导数中,是否存在一个最大的方向导数,如果有,其值是否唯一?为了回答这个问题,便需要引入梯度的概念。

1.4梯度

连续可微的多元函数 f ( x 1 , x 2 , ⋯   , x n ) f(x_1,x_2,\cdots,x_n) f(x1,x2,,xn),用矢量表示其在点 ( x 1 , x 2 , ⋯   , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,,xn)的梯度为 ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , ⋯   , ∂ f ∂ x n ) ( \frac{\partial f}{ \partial x_1},\frac{\partial f}{ \partial x_2},\cdots,\frac{\partial f}{ \partial x_n} ) (x1f,x2f,,xnf),表示f在该点沿着梯度方向函数值增长最快,梯度的模增长的程度。 ( − ∂ f ∂ x 1 , − ∂ f ∂ x 2 , ⋯   , − ∂ f ∂ x n ) ( -\frac{\partial f}{ \partial x_1},-\frac{\partial f}{ \partial x_2},\cdots,-\frac{\partial f}{ \partial x_n} ) (x1f,x2f,,xnf)则表示负梯度,沿着负梯度方向函数值减小最快。

梯度是一个向量(矢量), 表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。

因此可以沿着梯度方向,搜索极值点(梯度下降算法)。

2 梯度下降算法

梯度下降法,又叫最速下降算法,是机器学习中一种常用到的算法,但其本身不是机器学习算法,而是一种求解的最优化算法,用于无约束多元函数求极值问题。在机器学习中,优化问题的目标函数通常是建立一个损失函数 L ( θ ) \mathcal L (\theta) L(θ),使损失函数最小化 min ⁡ L ( θ ) \min \mathcal L(\theta) minL(θ),梯度下降算法通过不断更新:
θ t : = θ t − α ∇ L ( θ t ) \begin{align} \theta_{t}:=\theta_{t}-\alpha \nabla \mathcal L(\theta_t) \end{align} θt:=θtαL(θt)

  1. 初始化迭代次数,学习率 α \alpha α,起点
  2. L ( θ 1 , θ 2 , ⋯   , θ n ) \mathcal{L}(\theta_1,\theta_2,\cdots,\theta_n) L(θ1,θ2,,θn)在点 ( θ 1 , θ 2 , ⋯   , θ n ) (\theta_1,\theta_2,\cdots,\theta_n) (θ1,θ2,,θn)的梯度 ( ∂ L ∂ θ 1 , ∂ L ∂ θ 2 , ⋯   , ∂ L ∂ θ n ) ( \frac{\partial \mathcal{L}}{ \partial \theta_1},\frac{\partial \mathcal{L}}{ \partial \theta_2},\cdots,\frac{\partial \mathcal{L}}{ \partial \theta_n} ) (θ1L,θ2L,,θnL)
  3. 对每一个 θ i \theta_i θi采用式(1)进行更新;
  4. 计算损失函数 L ( θ 1 , θ 2 , ⋯   , θ n ) \mathcal{L}(\theta_1,\theta_2,\cdots,\theta_n) L(θ1,θ2,,θn)的值;
  5. 满足终止条件?是输出全局最优解,否转step2。

3 无约束函数极值问题求解

3.1 算例1

求函数 min ⁡ f ( x , y ) = 2 ( x − 1 ) 2 + y 2 \min f(x,y)=2(x-1)^2+y^2 minf(x,y)=2(x1)2+y2的极小值点,该函数的全局极小值点为 f ( 1 , 0 ) = 0 f(1,0)=0 f(10)=0

3.1.1 Python编程求解

"""
梯度下降SGD+多元函数求极值问题
求 f(x,y)=2(x-1)^2+y^2 的极小值
https://blog.csdn.net/MrKaj/article/details/115448804
"""
# 导入所需库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import math
from mpl_toolkits.mplot3d import Axes3D
import warnings


def plotFig(midRes):
    fig = plt.figure()
    ax = Axes3D(fig, auto_add_to_figure=False)
    fig.add_axes(ax)  # 设置图像为三维格式
    X = np.arange(-10, 10, 0.1)
    Y = np.arange(-10, 10, 0.1)  # X,Y的范围
    X, Y = np.meshgrid(X, Y)  # 绘制网格
    Z = 2 * (X - 1) ** 2 + Y ** 2  # f(x,y)=(sin(x)*sin(y))/(x*y),注意括号
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
    lx = [i[0] for i in midRes]
    ly = [i[1] for i in midRes]
    lz = [i[2] for i in midRes]
    ax.plot(lx, ly, lz, label='parametric curve', marker="o", linewidth=2, markersize=5, color='#000000')
    # 绘制3D图,后面的参数为调节图像的格式

    plt.show()  # 展示图片


# 原函数
def f(x, y):
    return 2 * (x - 1) ** 2 + y ** 2


# x方向上的梯度
def dx(x):
    return 4 * x - 4


# y方向上的梯度
def dy(y):
    return 2 * y


def gradient(x, y):
    return 4 * x - 4, 2 * y


# 初始值
X = x0 = 10
Y = y0 = 10
# 学习率
alpha = 0.1
# 保存梯度下降所经过的点
midRes = [[x0, y0, f(x0, y0)]]
# 迭代30次
maxIter = 50

if __name__ == "__main__":
    for i in range(maxIter):
        pdx, pdy = gradient(X, Y)
        X = X - alpha * pdx
        Y = Y - alpha * pdy
        Z = f(X, Y)
        print(u"iter=%d  x=%f  y=%f  z=%f" % (i, X, Y, Z))
        midRes.append([X, Y, Z])
    # 打印结果
    print(u"最终结果为:(x,y,z)=(%.5f, %.5f, %.5f)" % (X, Y, f(X, Y)))
    plotFig(midRes)


3.1.2 求解结果与可视化


iter=49  x=1.000000  y=0.000143  z=0.000000
最终结果为:(x,y,z)=(1.00000, 0.00014, 0.00000)

3.2 算例2 Rosenbrock函数

在数学最优化中,Rosenbrock函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock在1960年提出 。也称为Rosenbrock山谷或Rosenbrock香蕉函数,也简称为香蕉函数。Rosenbrock函数的每个等高线大致呈抛物线形,其全域最小值也位在抛物线形的山谷中(香蕉型山谷),位于 (x,y)=(1,1)点,数值为f(x,y)=0,图像如下图所示:

题目:使用梯度下降算法寻找Rosenbrock函数$f(x,y)=(1-x)^2+100(y-x^2)^2$的最小值。

3.2.1 Python编程求解

"""
梯度下降法
f(x,y)=(1-x)^2+100(y-x^2)^2
"""
import numpy as np
from matplotlib import pyplot as plt, ticker
from mpl_toolkits.mplot3d import Axes3D


def plotFig(f, midRes=None):
    fig = plt.figure()
    ax = Axes3D(fig, auto_add_to_figure=False)
    fig.add_axes(ax)  # 设置图像为三维格式
    X = np.arange(-1, 1, .1)
    Y = np.arange(-1, 1, .1)  # X,Y的范围
    X, Y = np.meshgrid(X, Y)  # 绘制网格
    Z = f(X, Y)
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap="rainbow", alpha=0.3)  # alpha控制透明度

    lx = [i[0] for i in midRes]
    ly = [i[1] for i in midRes]
    lz = [i[2] for i in midRes]
    ax.plot(lx, ly, lz, label='parametric curve', marker="*", linewidth=1, markersize=1, color='#000000')

    plt.show()


def f(x, y):
    return (1 - x) ** 2 + 100 * (y - x ** 2) ** 2


def gradient(x, y):
    return 400 * x * (x ** 2 - y) + 2 * x - 2, 200 * (y - x ** 2)


if __name__ == "__main__":
    X = x0 = -1
    Y = y0 = -1
    alpha = 0.002

    midRes = [[x0, y0, f(x0, y0)]]
    maxIter = 10000
    for i in range(maxIter):
        pdx, pdy = gradient(X, Y)
        X = X - alpha * pdx
        Y = Y - alpha * pdy
        Z = f(X, Y)
        print(u"iter=%d  x=%f  y=%f  z=%f" % (i, X, Y, Z))
        midRes.append([X, Y, Z])
    print(u"最终结果为:(x,y,z)=(%.5f, %.5f, %.5f)" % (X, Y, f(X, Y)))
    plotFig(f, midRes)

3.2.2 求解结果与可视化

iter=9999  x=0.999906  y=0.999811  z=0.000000
最终结果为:(x,y,z)=(0.99991, 0.99981, 0.00000)

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

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

相关文章

JSON多层级数据自动映射值优化

JSON多层级数据自动映射值优化 FieldMethodHandles结果分析 Spring boot装载模板代码工程中,JSON多层级数据自动映射值只是简单封装JsonPath,对DTO的声明字段做foreach轮询,检查字段注解JPath,然后从JsonPath的解析缓存中读取JPat…

数字孪生三维可视化在海洋能源开发中的应用有哪些?

数字孪生是一种将现实世界中的实体、系统或过程在虚拟世界中重构,并相互映射和交互的领先技术。在能源领域,数字孪生技术可谓大有作为,比如通过实时监测和分析各种数据,提高能源的利用效率、降低能源成本、优化能源分配&#xff0…

【零基础入门学习Python---Python中机器学习和人工智能之快速入门实践】

🚀 零基础入门学习Python🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜…

android_mars老师_获取用户定位

结果展示 MainActivity package com.example.locationmanager;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint; import android.content.Context; import android.location.Location; import …

JavaWeb 笔记——3

JavaWeb 笔记——3 JavaWeb技术栈一、HTTP1.1、HTTP介绍1.2、HTTP请求数据格式1.3、HTTP响应数据格式 二、Web服务器 - Tomcat2.1、简介&基本使用2.2、Tomcat配置和部署项目2.3、Web项目结构2.4、创建MavenWeb项目2.5、IDEA集成本地Tomcat2.6、Tomcat-Tomcat Maven插件 三、…

23西安电子科技大学通信工程学院811考研录取情况

01、通信工程学院各个方向 02、23通信工程学院一志愿考研录取情况总览、平均分 PS:通院23年院线相对于22年院线上涨5-15分,个别专业下降10分反应西电通院热度23年和22年基本一致。 PS:1、通院23年比较多的考生在本部学硕、专硕扎堆&#xff…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册6

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

yolov7论文学习——创新点解析、网络结构图

创新点 1、提出了E-ELAN,但是只在yolov7-e6e中使用到。 2、yolov7基于拼接模型的缩放方法,在yolov7x中使用到。 3、将重参数化卷积应用到残差模块中或者用到基于拼接的模块中去。RepConvN 4、提出了两种新的标签分配方法 一、ELAN和E-ELAN 1、 ELAN …

AI 如何应对 DevOps 监控和可观察性挑战

持续监控和可观察性用例 CI异常检测: AI可以分析历史数据以检测持续集成阶段的异常。任何不寻常的变化都可以在进入下一阶段之前进行标记以供审查。IBM Watson AnomalyDetection 等工具可以通过使用 AI 检测模式和异常情况来帮助识别这些异常情况。 代码质量保证&…

如何快速定位linux故障

1、背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以&#xff0c…

防火墙详解

1、什么是防火墙? 防火墙( Firewall )是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。 后来这个词语引入到了网络中,把从外向内的网络入侵行为看做是火灾,防止这种入侵的策略叫做防…

批量多开谷歌浏览器丨非扩展chrome浏览器实现分身多开微博 切换多个微博帐号工具

教你多开用Google 浏览器 实现Chrome怎样同时登录多个微博号 按照此教程多开后的Google浏览器可以实现相互的独立性,每个浏览器上收藏的书签、增加的拓展程序都可以实现独立性并可实现独立记忆性 一、安装正版Google浏览器 1:安装位置最好选择非C盘 二…

基于低代码平台打造的焙乐道销售支持系统

编者按:低代码平台说了那么多,在实际应用中又是怎样体现的它的种种优势呢?今天小编结合实际案例来说说。 本文是以最大的烘焙原料产商——焙乐道的销售支持系统为例子,进行说明。 客户说明:焙乐道是一家国际性集团公司…

凝思系统docker离线安装

# linux离线安装docker (18.03.1-ce) ## 解压,得到docker文件夹 tar xzvf docker-18.03.1-ce.tgz ## 将docker文件夹里面的所有内容复制到/usr/bin目录 sudo cp docker/* /usr/bin/ ## 开启docker守护进程 sudo dockerd & 当终端中显示【API list…

有参构造,无参构造,半缺省构造

目录 有参构造 无参构造 半缺省构造 有参构造 C 中的有参构造函数(Parameterized Constructor)是一个类中带有参数的特殊成员函数,用于创建对象并根据传入的参数对对象的成员进行初始化。有参构造函数在定义时需要指定参数的类型和名称&am…

相机- yolo训练集 环境搭建

一、环境准备 运行cmd执行python --version 检查是否安装成功 安装pip,打开运行指令 python -m ensurepip --upgrade 打开官网,下载get_pip.py 运行cmd 运行指令python get-pip.py 运行cmd 运行指令 pip --version 显示pip版本即安装成功 根据上面获…

Lucene介绍与入门使用

https://github.com/apache/lucene Lucene简介 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎…

宁波阿里云代理商:阿里巴巴CEO张勇:阿里云是一家云计算产品公司

4月26日,在2023阿里云合作伙伴大会上,阿里巴巴董事会主席兼CEO、阿里云智能CEO张勇表示,阿里云的核心定位是一家云计算产品公司,生态是阿里云的根基。 张勇表示,当前我们正站在智能化的起点,这是让“被集成…

基于Python的二维码识别系统设计与实现

博主介绍:擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例…

基于单片机智能加湿器 水位防干烧加湿器的设计与实现

功能介绍 以51/STM32单片机作为主控系统;LCD1602液晶显示当前温湿度,当前模式,湿度下限;按键设置湿度下限,当湿度低于下限时开启加湿器;水位传感器检查加湿器是否有水,如果没有水到话加湿器不进行工作,蜂鸣…