目前在做柔性超声成像系统相关研究,欢迎感兴趣的朋友联系我。

神经网络基础函数汇总

前言:该博客的内容主要是三大部分:激活函数、损失函数、评价函数。笔者主要是为了提供后面方便查阅和选择适当函数撰写,所以数学成分和工程思想成分都会相应部分得较重😘

在神经网络中,训练模型时需要计算损失函数来进行模型优化(对损失函数的梯度下降迭代来生成模型);在测试(训练后)模型时,在模型对测试集推导后得到的结果,通过计算评价函数来评估模型的效果。

激活函数及导数

  • ReLU(Rectified Linear Unit):修正线性单元

$$
ReLU(x) = \begin{cases}
x, & x>0 \\
0, & other
\end{cases}
\\
\frac{\partial ReLU(x)}{\partial x} = \begin{cases}
1, & x>0 \\
0, & other
\end{cases}
$$

  • Leeky ReLU

    在负半轴修正为一个具有非常非常小斜率的线性

$$
a(x) = \begin{cases}
x, & x>0 \\
\alpha\cdot x, & x \le 0
\end{cases}
\\
\frac{\partial a(x)}{\partial x} =\begin{cases}
1, & x>0 \\
\alpha, & x \le 0
\end{cases}
$$

  • Sigmoid
    • 将输出(映射)限制在0~1之间
    • 在函数两端带来梯度消失问题

$$
\sigma(x) = \frac{1}{1+e^{-x}}
\\
\frac{\partial \sigma(x)}{\partial x} =\sigma(x)[1-\sigma(x)]
$$

  • Softmax

    • 多分类问题中,在最后一层输出使用
    • 输出结果表示该类的概率,层的所有输出加起来为1
      $$
      y_i = S(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{C}e^{x_j}}
      $$
      在反向传播时,对该式求导(过程)为:
      $$
      \frac{\partial y_i}{\partial x_k} = \begin{cases}
      \frac{ [e^{x_k}\cdot \sum_{j=i}^{C}e^{x_j} ] - [ e^{x_k} \cdot e^{x_k} ]}{[\sum_{j=1}^{C}e^{x_j}]^2}, i=k
      \\
      \frac{ - [ e^{x_i} \cdot e^{x_k} ]}{[\sum_{j=1}^{C}e^{x_j}]^2}, i \neq k
      \end{cases}
      \\ = \begin{cases}
      y_k(1-y_k), i=k
      \\
      -y_i y_k, i \neq k
      \end{cases}
      $$
      在工程实际使用中,一般采用矩阵形式运算:
      $$
      S(X) = \frac{e^{X}}{\sum e^{X}}
      $$
  • tanh

    • 将输出(映射)限制在-1~1之间
    • 在函数两端带来梯度消失问题

$$
\tanh(x) = \frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
\\
\frac{\partial \tanh(x)}{\partial x} = 1-\tanh^2(x)
$$

  • Swish
    • Swish无上界有下界(和ReLU一样)
    • Swish是平滑且非单调(与ReLU不同)

$$
S(x) = x\cdot \sigma(x) = \frac{x}{1+e^{-x}}
\\
S’(x) = S(x)+\sigma(x)\cdot(1-S(x))
$$

  • Mish
    • 无上界,有下界
    • 非单调
    • 无穷连续性和光滑性
    • 计算量较大,但是效果好(深度网络)。YOLO中被使用

$$
M(x) = x\cdot \tanh(\ln(1+e^x))
$$

损失函数

$$
J(w,b) = \frac{1}{m}\sum^m_{i=1}L(\hat{y}^{(i)},y^{(i)})
$$

  • MSE(Mean Squared Error0L2):均方误差函数

$$
MSE = \frac{1}{m} \sum^m_{i=1} (y- \hat y)^2
$$

  • RMSE(Root Mean Square Error):均方根误差

$$
RMSE = \sqrt{\frac{1}{m} \sum^m_{i=1} (y- \hat y)^2}
$$

  • MAE(Mean Absolute Error-L1):平均绝对误差

$$
MAE = \frac{1}{m} \sum^m_{i=1} |y- \hat y|
$$

  • Exponential Loss:指数损失函数

$$
L(Y,f(X)) = \frac{1}{m}\sum^m_{i=1}\exp(-y_i \cdot f(x_i))
$$

  • Log-likelihood Loss:①对数似然损失函数;②交叉熵损失函数
    • BCE(Binary Cross Entropy):二元交叉熵
    • CCE(Complement Cross Entropy):互补交叉熵
    • SCCE:稀疏多分类交叉熵
  • Huber

Huber

$$
L_\delta(y,f(x)) = \begin{cases}
\frac{1}{2}(y-f(x))^2 &,|y-f(x)| \le\delta
\\
\delta|y-f(x)| - \frac{1}{2}\delta^2 &,other
\end{cases}
$$

Huber

让我们来分析一下Huber函数的数学本质和优缺点。

从表达式上可见,Huber函数在估计量偏移样本量小的时候,本质上是平方损失函数;而当偏移大的时候,本质上是绝对误差。也就是说Huber是对MSE和MAE的融合

接下来从实际效果上思考Huber的优缺点。首先我们要分析一下MAE和MSE:考虑平方误差函数,当有一个样本的误差(大于1)较大的时候,这个误差会被严重放大,并且如果这是一个异常值,那么模型就会对这单个值作出谦让、调整(或称为适应),这就需要更多的正常值样本来平衡;再考虑绝对误差,对绝对值函数求导可知道MAE对小误差和大误差的导数是一样的,那么当一些误差发生小的偏移时(这种误差是可以被接受的,可以理解为噪声),模型应该作出轻微的调整而不是和大误差一样。所以这时候就可见Huber函数的优点啦!😜由于融合了小偏差时MSE的稳定性和大偏差时MAE的鲁棒性,使得Huber具有更加优秀的性能

Log-likelihood Loss

该损失函数一般用于分类器损失计算和评价

$$
L(Y,P(Y|X)) = - \log P(Y|X) = -\frac{1}{N}\sum_{i=1}^N\sum_{j=1}^M y_{ij} \log p_{ij}
$$

上式中符号意义为:

  • 输入样本X,样本量为N
  • 输出样本Y,样本可能的值有M种
  • 真实类别判别指标(注意是二值的)
    $$
    y_{ij}
    $$
  • 输入i分类器输出属于j可能的概率
    $$
    p_{ij}
    $$

这个玩意之所以还有个名字叫交叉熵损失,是因为和信息论中的信息熵数学表达式十分相似

BCE二元交叉熵函数

当分类器输出只有两种情况时(M=2),上式退化为二元交叉熵函数,如下式:

$$
L = - \frac{1}{N} \sum^N_{i = 1} (\hat {y_i} \log \hat{y_i} + (1-\hat{y_i}) \log(1-\hat{y_i}))
$$

显然,该式还可以继续退化:

此时称为:categorical_crossentropy

$$
\because \hat y_i = [0,1]
\\ \therefore
L = -\frac{1}{N}\sum^N_{i=1} \hat{y_i}\log \hat{y_i}
$$

评价函数

  • MAE、MSE、RMSE
  • MAPE(Mean Absolute Percentage Error):平均绝对百分比误差

$$
MAPE = \frac{1}{N} \sum^N_{i=1} | \frac{\hat{y_i} - y_i}{y_i} | \cdot 100%
$$

BUG☢真实值同时为零时,分母为0!

  • SMAPE(Symmetric Mean Absolute Percentage Error):对称平均绝对百分比误差

$$
SMAPE = \frac{1}{N} \sum^N_{i=1} | \frac{\hat{y_i} - y_i}{(|\hat{y_i}|+|y_i|) /2 } | \cdot 100%
$$

BUG☢推测值和真实值同时为零时,分母为0!

  • R Squared:决定系数
  • Confusion Matrix:混淆矩阵
    • 准确率
    • 精确率
    • 召回率

R Squared

最好的衡量线性回归法的指标

$$
R^2 = 1- \frac{\sum^n_{i=1}|\hat{y_i} - y_i |^2 }{\sum^n_{i=1}|\overline{y_i} - y_i |^2}
$$

上式中的分母部分,可以理解为一个模型(基准模型):

$$
|\overline{y_i} - y_i |^2
$$

该指标取值范围为[0,1];如果小于0,则代表你的模型预测结果还不如基准模型

Confusion Matrix

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。此处给出的数学表示基于二分类

预测正例 预测反例
真实正例 TP(真正) FN(假反)
真实假例 FP(假正) TN(真反)

准确率(Accuracy):被预测对的样本,但是样本不平衡时效果差

$$
A = \frac{TP+TN}{TP+FP+TN+FN}
$$

精准率(Precision):预测为正的样本多少为对的

$$
P = \frac{TP}{TP+FP}
$$

召回率(Recall):实际正样本中多少预测对了

$$
R = \frac{TP}{TP+FN}
$$

神经网络原理简摘

考虑一个最简单的浅层全连接神经网络,那么需要训练的模型参数就是神经元中的权重和偏置,采用(对损失函数)梯度下降的方法:

$$
w := w-\alpha\cdot\frac{\partial J(w,b)}{\partial w}
\\
b := b-\alpha\cdot\frac{\partial J(w,b)}{\partial b}
$$

网络爬虫48H快速入门

这是一篇货真价实的48H快速入门爬虫+实战的博文☣今年笔者的大学软件课设题目就是做一个豆瓣电影数据爬虫,所以我将以一个网络爬虫小白快速入门后的视角来讲解

开始前准备

当然小白指的还是有一定基础的,在开始前你需要:

  • 具有基础的编程能力和思维,如:循环、条件判断、编码转换等
  • 基本的数据结构和算法能力:队列(FIFO)、哈希表等
  • 掌握一门你的工具编程语言,爬虫一般推荐Python(优美好调试and菜鸟教程传送门
  • 有HTTP、URL等WEB传输的基本概念(比如404、200和500是否能让你想起什么?)
  • 能看懂HTML文件的格式(附菜鸟教程传送门
  • 有数据库的概念

什么是爬虫?

概况成一句话:爬虫就是按照你指定的规律不断循环提取页面里你需要的信息(包括下一步要爬取的网页链接)。因为互联网就是一个通信“网”🕸,所以我们的数据寻找程序就像是一只在“网”上的各个“节点”(有URL的页面)间“爬来爬去”(跳转),这就是爬虫名字的由来。下图是爬虫的工作原理:

爬虫原理简图

比如说,这次(笔者的软件课设)要爬取豆瓣电影网的电影数据。让我们先缕一缕要求:

阅读更多...

NodeJS+Express+Vue+MongoDB+Nginx环境搭建

这一套环境算是目前(2021年)主流的网站建设框架了吧,最近刚好需要部署学院里的一套网站(前端&后端),所以就简要记录一下配置安装的步骤防止自己后面遗忘😘

Attention:服务器系统为CentOS7

安装nodeJS

打开官网下载地址,选择想要的版本并copy链接,在终端使用wget下载

1
$ wget https://nodejs.org/dist/v14.15.3/node-v14.15.3-linux-x64.tar.xz

解压文件并移动到安装目录

1
2
3
$ tar -zxvf node-v14.15.3-linux-x64.tar.xz
$ mv node-v14.15.3-linux-x64 /usr/local/
$ mv node-v14.15.3-linux-x64 nodejs

创建程序引导链接(Method.1)

1
2
$ ln -s /usr/local/nodejs/bin/node /usr/local/bin
$ ln -s /usr/local/nodejs/bin/npm /usr/local/bin

创建链接的方法可能略有繁琐,也可以把整个bin可执行文件目录添加到系统环境变量(Method.2)

1
$ vim /etc/profile

在文末添加

1
2
PATH = $PATH:/usr/local/nodejs/bin
export PATH

查看版本号测试一下

1
2
$ node -v
$ npm -v

安装cnpm

阅读更多...
  • Copyrights © 2022-2024 RY.J
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信