数学中的导数

2023-10-26

导数(Derivative)是微积分学(微积分学是研究极限、微分学、积分学和无穷级数等的一个数学分支)中重要的基础概念。一个函数在某一点的导数描述了这个函数在这一点附件的变化率。导数的本质是通过极限的概念对函数进行局部的线性逼近。当函数f的自变量在一点x0上产生一个增量h时,函数输出值的增量与自变量增量h的比值在h趋于0时的极限如果存在,即为f在x0处的导数,记作

导数是函数的局部性质。不是所有的函数都有导数,一个函数也不一定在所有点上都有导数。若某函数在某一点导数存在,则称其在这一点可导,否则称为不可导。如果函数的自变量和取值都是实数的话,那么函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率(斜率用来量度斜坡的斜度,数学上,直线的斜率在任一处皆相等,是直线倾斜程度的量度。透过代数和几何能计算出直线的斜率;曲线上某点的切线斜率反映此曲线的变数在此点的变化快慢程度,用微积分可计算出曲线中任一点的切线斜率)。

对于可导的函数f,x→f’(x)也是一个函数,称作f的导函数。寻找已知的函数在某点的导数或其导函数的过程称为求导。反之,已知导函数也可以倒过来求原来的函数,即不定积分(在微积分中,一个函数f的不定积分,也称为原函数或反导数,是一个导数等于f的函数F,即F’=f。不定积分和定积分间的关系由微积分基本定理确定)。微积分基本定理说明了求原函数与积分是等价的。求导和积分是一对互逆的操作,它们都是微积分学中最为基础的概念。

一般定义:设有定义域和取值都在实数域中的函数y=f(x)。若f(x)在点x0的某个领域内有定义,则当自变量x在x0处取得增量Δx(点x0+Δx仍在该邻域内)时,相应地y取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时的极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数,记为f’(x0),即:

对于一般的函数,如果不使用增量的概念,函数f(x)在点x0处的导数也可以定义为:当定义域内的变量x趋近于x0时,f(x)-f(x0)/(x-x0)的极限,也就是说:

几何意义:当函数定义域和取值都在实数域中的时候,导数可以表示函数的曲线上的切线斜率。

        导函数:若函数f(x)在其定义域包含的某区间I内每一个点都可导,那么也可以说函数f(x)在区间I内可导,这时对于I内每一个确定的x值,都对应着f的一个确定的导数值,如此一来就构成了一个新的函数x→f’(x),这个函数称作原来函数f(x)的导函数,记作:y’、f’(x)或者。值得注意的是,导数是一个数,是指函数f(x)在点x0处导函数的函数值。但在不至于混淆的情况系,通常也可以说导函数为导数。由于对每一个可导的函数f(x),都有它的导函数f’(x)存在,我们还可以定义将函数映射到其导函数的算子。这个算子称为微分算子。

        导数与微分:微分也是一种线性描述函数在一点附近变化的方式。微分和导数是两个不同的概念。但是,对一元函数来说,可微与可导是完全等价的。可微的函数,其微分等于导数乘以自变量的微分dx,换句话说,换句话说,函数的微分与自变量的微分之商等于该函数的导数。因此,导数也叫做微商。函数y=f(x)的微分又可记作dy=f’(x)dx。

        函数可导的条件:如果一个函数在定义域为全体实数,即函数在(-∞,+∞)上都有定义,那么该函数是不是在定义域上处处可导呢?答案是否定的。函数在定义域中一点可导需要一定的条件。首先,要使函数f在一点可导,那么函数一定要在这一点处连续。换言之,函数若在某点可导,则必然在该点处连续。然而,连续性并不能保证可导性。即使函数在一点上连续,也不一定就在这一点可导。事实上,存在着在每一点都连续,但又在每一点都不可导的”病态函数”。在连续而不可导的函数里,一种常见的情况是,函数在某一点连续,并且可以定义它的左导数和右导数,然而左导数和右导数并不相等,因而函数在该处不可导。实际上,若函数导数存在,则必然可以推出左右导数相等,这是由极限的性质(极限存在则左右极限相等)得来。如果函数在一点的左右导数都存在并且相等,那么函数在该处可导。

        导数与函数的性质:

        (1)、单调性:如果函数的导函数在某一区间内恒大于零(或恒小于零),那么函数在这一区间内单调递增(或单调递减),这种区间也称为函数的单调区间。导函数等于零的点称为函数的驻点(或极值可疑点),在这类点上的函数可能会取得极大值或极小值。

        (2)、凹凸性:可导函数的凹凸性与其导数的单调性有关。如果函数的导函数在某个区间上单调递增,那么这个区间上的函数是向下凸的,反之则是向上凸的。

        基本函数的导数:

        (1)、多项式函数:如果f(x)=xr,其中r是非零实数,那么导函数f’(x)=rxr-1。函数f的定义域可以是整个实数域,但导函数的定义域则不一定与之相同。

        (2)、常函数的导数是0。

        (3)、底数为e的指数函数y=ex的导数还是自身。一般的指数函数y=ax的导数还需要乘以一个系数即为ln(a)ax。自然对数函数ln(x)的导数是x-1.同样的,一般的对数函数loga(x)导数则还需要乘以一个系数即为1/(xln(a))。

        (4)、三角函数的导数仍然是三角函数,或者由三角函数构成:

                 f’(sin(x))=cos(x)    f’(tan(x))= sec2(x)=1/(cos2(x))

                 f’(cos(x))=-sin(x)    f’(cot(s))=-csc2(x)=-1/(sin2(x))

        (5)、反三角函数的导数则是无理分式:

        导数的求导法则:由基本函数的和、差、积、商或相互复合构成的函数的导函数则可以通过函数的求导法则来推导。基本的求导法则如下:

        (1)、求导的线性性:对函数的线性组合求导,等于先对其中每个部分求导后再取线性组合:(af+bg)’=af’+bg’(其中a,b为常数);

        (2)、两个函数的乘积的导函数,等于其中一个的导函数乘以另一者,加上另一者的导函数与其的乘积:(fg)’=f’g+fg’

(3)、两个函数的商的导函数也是一个分式,其中分子是分子函数的导函数乘以分母函数减去分母函数的导函数乘以分子函数后的差,而其分母是分母函数的平方:(在g(x)≠0处方有意义)

        (4)、复合函数的求导法则:如果有复合函数f(x)=h[g(x)],那么f’(x)=h’[g(x)]·g’(x)

        若要求某个函数在某一点的导数,可以先运用以上方法求出这个函数的导函数,再看导函数在这一点的值。

二阶导数:如果函数的导数f’(x)在x处可导,则称[f’(x)]’为x的二阶导数,记做:

        函数在定义域中一点可导需要一定的条件是:函数在该点的左右两侧导数都存在且相等。连续的函数不一定处处可导。但处处可导的函数一定处处连续。

以上内容摘自:维基百科

        之前在  http://blog.csdn.net/fengbingchun/article/details/73848734 和  http://blog.csdn.net/fengbingchun/article/details/73872828 中介绍过激活函数sigmoid、ReLU、Leaky ReLU、ELU、softplus,这里分别对它们进行求导:

        sigmoid:


        ReLU:


        Leaky ReLU:


        ELU:


        对ELU求导数好像有些复杂,在Caffe和tiny-dnn中求法好像也不一致,公式中是 维基百科 中给出的求法。

        softplus:


        根据以上公式实现的C++代码:

#include "funset.hpp"
#include <math.h>
#include <iostream>
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include "common.hpp"

#define EXP 1.0e-5

namespace fbc {

// ========================= Activation Function: ELUs ========================
template<typename _Tp>
int activation_function_ELUs(const _Tp* src, _Tp* dst, int length, _Tp a = 1.)
{
	if (a < 0) {
		fprintf(stderr, "a is a hyper-parameter to be tuned and a>=0 is a constraint\n");
		return -1;
	}

	for (int i = 0; i < length; ++i) {
		dst[i] = src[i] >= (_Tp)0. ? src[i] : (a * (exp(src[i]) - (_Tp)1.));
	}

	return 0;
}

template<typename _Tp>
int activation_function_ELUs_derivative()
{
	// to do
}

// ========================= Activation Function: Leaky_ReLUs =================
template<typename _Tp>
int activation_function_Leaky_ReLUs(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = src[i] > (_Tp)0. ? src[i] : (_Tp)0.01 * src[i];
	}

	return 0;
}

template<typename _Tp>
int activation_function_Leaky_ReLUs_derivative(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = src[i] > (_Tp)0. ? (_Tp)1 : (_Tp)0.01;
	}

	return 0;
}

// ========================= Activation Function: ReLU =======================
template<typename _Tp>
int activation_function_ReLU(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = std::max((_Tp)0., src[i]);
	}

	return 0;
}

template<typename _Tp>
int activation_function_ReLU_derivative(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = src[i] < (_Tp)0 ? (_Tp)0 : (_Tp)1;
	}

	return 0;
}

// ========================= Activation Function: softplus ===================
template<typename _Tp>
int activation_function_softplus(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = log((_Tp)1. + exp(src[i])); // log1p(exp(src[i]))
	}

	return 0;
}

template<typename _Tp>
int activation_function_softplus_derivative(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = (_Tp)(1. / (1. + exp(-src[i])));
	}

	return 0;
}

// ============================ Activation Function: sigmoid ================
template<typename _Tp>
int activation_function_sigmoid(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = (_Tp)(1. / (1. + exp(-src[i])));
	}

	return 0;
}

template<typename _Tp>
int activation_function_sigmoid_derivative(const _Tp* src, _Tp* dst, int length)
{
	for (int i = 0; i < length; ++i) {
		dst[i] = (_Tp)(exp(-src[i]) / pow((1+exp(-src[i])), 2.f));
	}

	return 0;
}

int test_activation_function()
{
	std::vector<double> src{ 1.23f, 4.14f, -3.23f, -1.23f, 5.21f, 0.234f, -0.78f, 6.23f };
	int length = src.size();
	std::vector<double> dst(length);

	fprintf(stderr, "source vector: \n");
	fbc::print_matrix(src);
	fprintf(stderr, "calculate activation function:\n");

	fprintf(stderr, "type: sigmoid result: \n");
	fbc::activation_function_sigmoid(src.data(), dst.data(), length);
	fbc::print_matrix(dst);
	fprintf(stderr, "type: sigmoid derivative result: \n");
	fbc::activation_function_sigmoid_derivative(src.data(), dst.data(), length);
	fbc::print_matrix(dst);
	fprintf(stderr, "type: sigmoid fast result: \n");
	fbc::activation_function_sigmoid_fast(src.data(), dst.data(), length);
	fbc::print_matrix(dst);

	fprintf(stderr, "type: softplus result: \n");
	fbc::activation_function_softplus(src.data(), dst.data(), length);
	fbc::print_matrix(dst);
	fprintf(stderr, "type: softplus derivative result: \n");
	fbc::activation_function_softplus_derivative(src.data(), dst.data(), length);
	fbc::print_matrix(dst);

	fprintf(stderr, "type: ReLU result: \n");
	fbc::activation_function_ReLU(src.data(), dst.data(), length);
	fbc::print_matrix(dst);
	fprintf(stderr, "type: ReLU derivative result: \n");
	fbc::activation_function_ReLU_derivative(src.data(), dst.data(), length);
	fbc::print_matrix(dst);

	fprintf(stderr, "type: Leaky ReLUs result: \n");
	fbc::activation_function_Leaky_ReLUs(src.data(), dst.data(), length);
	fbc::print_matrix(dst);
	fprintf(stderr, "type: Leaky ReLUs derivative result: \n");
	fbc::activation_function_Leaky_ReLUs_derivative(src.data(), dst.data(), length);
	fbc::print_matrix(dst);

	fprintf(stderr, "type: Leaky ELUs result: \n");
	fbc::activation_function_ELUs(src.data(), dst.data(), length);
	fbc::print_matrix(dst);

	return 0;
}

GitHubhttps://github.com/fengbingchun/NN_Test


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学中的导数 的相关文章

  • 【阅读论文方法总结】

    1 快速浏览摘要 看是否有自己需要的东西 2 如果需要 github上查找相关论文代码 对照着论文进行阅读 这样效率高 能够快速理解
  • [深度学习] TensorFlow上实现Unet网络

    代码取自于 https github com jakeret tf unet TensorFlow Unet文档 https tf unet readthedocs io en latest installation html Tensor
  • 笔记︱几款多模态向量检索引擎:Faiss 、milvus、Proxima、vearch、Jina等

    转自 https zhuanlan zhihu com p 364923722 引用文章 7 的开篇 来表示什么是 向量化搜索 人工智能算法可以对物理世界的人 物 场景所产生各种非结构化数据 如语音 图片 视频 语言文字 行为等 进行抽象
  • 序列模型——自然语言处理与词嵌入(理论部分)

    1 词汇表征 深度学习已经给自然语言处理 Natural Language Process NLP 带来革命性的变革 其中一个很关键的概念是词嵌入 word embedding 这是语言表示的一种方式 可以让算法自动的了解一些类似的词 例如
  • 深度学习之图像分类(一)--分类模型的混淆矩阵

    深度学习之图像分类 一 分类模型的混淆矩阵 深度学习之图像分类 一 分类模型的混淆矩阵 1 混淆矩阵 1 1 二分类混淆矩阵 1 2 混淆矩阵计算实例 2 混淆矩阵代码 3 混淆矩阵用途 深度学习之图像分类 一 分类模型的混淆矩阵 今天开始
  • 朴素贝叶斯分类器简介及C++实现(性别分类)

    贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器 在机器学习中 朴素贝叶斯分类器是一系列以假设特征之间强 朴素 独立下运用贝叶斯定理为基础的简单概率分类器 朴素贝叶斯是文本分类的一种热门 基准 方法 文本分类是以词频为特征判断文件所属类别或
  • 联邦学习 深度学习对抗攻击

    联邦学习本身 联邦学习 实际上是一种加密的分布式机器学习技术 参与各方可以在不披露底层数据和底层数据的加密 混淆 形态的前提下共建模型 如果机构之间的数据无法互通 一家企业一家机构数据量有限 或者是少数巨头公司垄断大量数据 而小公司很难获得
  • 深度学习可视化工具FiftyOne介绍

    FiftyOne是用于构建高质量数据集和计算机视觉模型的开源工具 由Python语言实现 最新发布版本为v0 14 0 它的License是Apache 2 0 源码位于https github com voxel51 fiftyone F
  • 深度学习中的优化算法之Adam

    之前在https blog csdn net fengbingchun article details 124909910 介绍过深度学习中的优化算法Adadelta 这里介绍下深度学习的另一种优化算法Adam 论文名字为 ADAM A M
  • cs231n: How to Train a Neuron Network 如何训练神经网络

    CS231N第六第七课时的一些笔记 如何训练神经网络是一个比较琐碎的事情 所以整理了一下 以后训练Neuron Network的时候可以看一下 Activation Functions ReLu good ELU leaky ReLu no
  • Emojify – Create your own emoji with Deep Learning 通过深度学习创建你自己的表情

    全文总览 本文目的 原文链接 我的电脑环境 数据集下载 代码下载 本文目的 深度学习初级项目 Emojify Create your own emoji with Deep Learning 通过深度学习创建你自己的表情 本文旨在描述源代码
  • 决策树(Decision Tree)简介

    决策树 Decision Tree 及其变种是另一类将输入空间分成不同的区域 每个区域有独立参数的算法 决策树分类算法是一种基于实例的归纳学习方法 它能从给定的无序的训练样本中 提炼出树型的分类模型 树中的每个非叶子节点记录了使用哪个特征来
  • GNN等优缺点总结及解决方案

    https www zhihu com question 338051122 https www zhihu com question 346942899 https zhuanlan zhihu com p 291230435 GCN的缺
  • Matting(抠图)--用深度学习自动去除照片背景

    转自 https zhuanlan zhihu com p 38031181 https zhuanlan zhihu com p 151212267 现在又有一个 AI 能干 Photoshop 的活了 自动抠图 一键去除照片背景 这款
  • SqueezeNet运用到Faster RCNN进行目标检测+OHEM

    目录 目录 一SqueezeNet介绍 MOTIVATION FIRE MODULE ARCHITECTURE EVALUATION 二SqueezeNet与Faster RCNN结合 三SqueezeNetFaster RCNNOHEM
  • Deep Learning(深度学习)之(三)Deep Learning的常用模型或者方法

    九 Deep Learning的常用模型或者方法 9 1 AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点 人工神经网络 ANN 本身就是具有层次结构的系统 如果给定一个神经网络 我们假设
  • 谈一谈关于NLP的落地场景和商业价值

    欢迎大家关注微信公众号 baihuaML 白话机器学习 在这里 我们一起分享AI的故事 您可以在后台留言 关于机器学习 深度学习的问题 我们会选择其中的优质问题进行回答 本期的问题 你好 请问下nlp在现在的市场主要应用在哪些方面 什么是N
  • 【直观详解】什么是正则化

    转自 https charlesliuyx github io 2017 10 03 E3 80 90 E7 9B B4 E8 A7 82 E8 AF A6 E8 A7 A3 E3 80 91 E4 BB 80 E4 B9 88 E6 98
  • yolov5量化部署(基于openvino和tensorrt)

    yolov5 openvino量化部署 首先 下载YOLOv5源码 安装YOLOv5和OpenVINO的python依赖 git clone https github com ultralytics yolov5 git pip insta
  • Anchor是什么?

    1 选择性搜索 Selective Search 先介绍一下传统的人脸识别算法 是怎么检测出图片中的人脸的 以下图为例 如果我们要检测图中小女孩的人脸位置 一个比较简单暴力的方法就是滑窗 我们使用不同大小 不同长宽比的候选框在整幅图像上进行

随机推荐

  • 7-3 两个有序序列的中位数 (25分) 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A ​0 ​​ ,A ​1 ​​ ,⋯,A ​N−1 ​​ 的中位数指A

    7 3 两个有序序列的中位数 25分 已知有两个等长的非降序序列S1 S2 设计函数求S1与S2并集的中位数 有序序列A 0 A 1 A N 1 的中位数指A N 1 2 的值 即第 N 1 2 个数 A 0 为第1个数 输入格式 输入分三
  • pycharm中unresolved reference怎么解决(配置问题)

    iunresolved reference怎么解决 解决方法 本人使用方法二解决的 方法1 进入PyCharm gt Settings gt Build Excution Deployment gt Console gt Python Co
  • pdpbox 安装问题

    本人走了非常多的弯路 网上能找到的方法都试过了 简直吐血 最终发现问题解决的很简单 pip instal pdpbox 改为pip install pdpbox1 没错只用加一个数字 1 原因我不太清楚 应该是版本问题 可见官网PDPbox
  • chrom for ubuntu (Chrominum)的安装

    原文链接 http www ubuntugeek com how to install chromium google chrome in ubuntu using deb package html Chrominum的安装 1 编辑 et
  • java.sql.SQLNonTransientConnectionException: Could not create connection to database server

    在搭建springboot项目时 整合JdbcTemplate和MyBatis连接数据库报错 报错为 java sql SQLNonTransientConnectionException Could not create connecti
  • 渐变维度(Slowly Changing Dimension)及其处理方法

    渐变维度 Slowly Changing Dimension 及其处理方法 要讨论什么是渐变维度 或者缓慢变化维度 就要先说说什么是维度 虽然经常挂在嘴边的词 但解释起来确实有难度 更不要说给出一个概念了 我们 平时提到的0维的点 一维的线
  • PTA(test)python3

    考试题 判断题 选择题 函数题 6 1 编写函数 接收参数a和n 计算并返回形式如a aa aaa aaaa aaa aaa的表达式前n项的值 其中a为小于10的自然数 8 分 6 2 jmu python 判断质数 10 分 编程题 7
  • 遇到pdf文件损坏打不开要如何解决?

    在我们平时的办公中 会使用电脑来编辑 接收各种电子文件 大家会发现pdf文件是我们经常使用的一种文件类型 但是 有时候 我们会发现自己的pdf文件根本打不开 相信很多朋友遇到这种情况不知道该怎么办 如果你也想知道具体的原因和解决方法 就跟着
  • 服务器运维方法

    为保官网的正常稳定运行 也为了更好的对服务器进行管理维护 特制定以下运维方案 1 硬件系统管理 一 服务器运行稳定性 服务器在运往托管商处上架前 应对服务器的稳定性进行全面的测试 包括网站主程序的测试 网站数据库的测试 网站压力测试等多项内
  • C++复习笔记--auto A:B 的使用

    1 用法 1 1 for auto A B 利用 A 遍历并获取 B 容器中的每一个值 但不会影响容器 B 的内容 include
  • SpringCloudAlibaba微服务架构搭建(四)Gateway网关(包含源码)

    目录 前言 1 什么是Spring Cloud Gateway 2 核心概念与架构解析 1 Route 路由 2 谓语 断言 3 Filter 过滤器 4 负载均衡与动态路由 编辑 3 请求路由与负载均衡 请求路由 负载均衡 动态路由 4
  • 常用文件扩展名介绍

    我们对文件命名是以扩展名加以区分 即文件名格式为 主文件名 扩展名 系统文件按照不同的格式和用途进行分类 以下是常用文件扩展名介绍 1 txt 记事本 2 doc docx word文档 3 xls xlsx excel表格 4 ppt p
  • chatgpt每日问答

    20230411 将数组转成十六进制字符串 array 12 34 56 78 90 hex string join 02x format x for x in array print hex string 20230409 变声 用pyt
  • 中文情感分类

    本文通过ChnSentiCorp数据集介绍了文本分类任务过程 主要使用预训练语言模型bert base chinese直接在测试集上进行测试 也简要介绍了模型训练流程 不过最后没有保存训练好的模型 一 任务和数据集介绍 1 任务 中文情感分
  • 【spring boot】service层事务控制

    我们再做spring boot项目的时候 经常需要在一个service层调用多个dao层 操作不同的数据库表来实现业务 这个时候要对事务进行一个统一的过程 spring boot提供了这种支持 首先需要在service层添加 Transac
  • JSP数据交互(二)---》jsp四大作用域

    jsp四大作用域 application作用域 对应整个应用上下文 page作用域 作用域指本JSP页面范围 pageContext setAttribute 键 值 pageContext getAttribute 键 为
  • 电商平台数据查询工具(京东数据分析软件)

    京东爆款如何打造 是很多商家都头疼的问题 下面 6个步骤分享给大家 首先是选品 对于处于不同阶段的商家来说 选品方式不同 针对正准备开店的商家 选品可通过以下方式 1 市场分析和自身情况 确定主打品类 2 行业市场和京东平台市场 品类多维度
  • 使用R语言生成相同分组数据的抽样ID,并生成测试集和训练集

    使用R语言生成相同分组数据的抽样ID 并生成测试集和训练集 在进行数据分析或机器学习任务时 我们经常需要将数据集划分为训练集和测试集 为了确保实验结果的可复现性 我们需要为相同分组的数据生成相同的抽样ID 本文将介绍如何使用R语言实现这一过
  • pbr制作

    http www aboutcg org course tut sd 141015 http www zf3d com news asp id 27081
  • 数学中的导数

    导数 Derivative 是微积分学 微积分学是研究极限 微分学 积分学和无穷级数等的一个数学分支 中重要的基础概念 一个函数在某一点的导数描述了这个函数在这一点附件的变化率 导数的本质是通过极限的概念对函数进行局部的线性逼近 当函数f的