最近在看算法导论中文版,第一部分的基础知识里有许多数学上的知识,多重对数函数就是其中一个我不太熟悉的知识。 多重对数函数的定义是: lg*n=min{i≥0:lg(i)n≤1} lg*2=1 lg*4=2 lg*16=3 lg*65536=4 lg*265536=5 也就是说呢, lg(1)16=lg16=4 lg(2)16=lg(lg(1)16)=lg4=2 lg(3)16=lg(lg(lg(1)16))=lg(lg(2)16)=lg2=1 i=3时,lg(i)n≤1 所以lg*16=3 这样重复地用函数
简单工具类 写作初衷:由于日常开发经常需要用到很多工具类,经常根据需求自己写也比较麻烦 网上好了一些工具类例如commom.lang3或者hutool或者Jodd这样的开源工具,但是 发现他们之中虽然设计不错 以外的源码 2.牺牲代码复用性,每个类都必须是单独的组件,绝不互相引用,做到完全解耦 package *; /** * @program: simple_tools * @description: 对数函数 new LogFunction(); } } } } /** * 功能描述: * 〈初始化对数函数 zero and not be one"); } instance.setA(a); } /** * 功能描述: * 〈判断点是否在对数函数上 point.getY(); return y == Math.pow(x,instance.getA()); } /** * 功能描述: * 〈每个对数函数都会过点
指数函数与对数函数的核心公式指数函数与对数函数的曲线绘制from __future__ import annotations , annotationsimport matplotlib.pyplot 常规对数函数 (底数为2)# =============================================================================plt.subplot (2 , 2 , 3) # 2行2列的第3个子图# 生成x值(0.1到4之间等间距的100个点),避免0x = np.linspace(0.1 , 4 , 100)# 计算以2为底的对数函数值y = (2 , 2 , 4) # 2行2列的第4个子图# 计算自然对数函数值y = np.log(x) # ln(x)# 绘制函数曲线plt.plot(x , y , 'c-' , linewidth = """自然对数函数Natural logarithmic function (通常表示为 ln(x) 或 log_e(x))常用对数函数Common logarithmic function (以10为底的对数
注意:C语言标准库未直接提供以任意正数为底的对数函数,但可通过换底公式推导:logₐ(b) = log(b)/log(a) 或 logₐ(b) = log10(b)/log10(a)。 + x³/3! + ... + xⁿ/n!(n→∞)。 泰勒级数展开式(以x=1为中心)为:ln(x) = (x-1) - (x-1)²/2 + (x-1)³/3 - ... + (-1)^(n+1)*(x-1)ⁿ/n(n→∞,x∈(0,2])。 + n * 0.69314718056 return result 3.3 log10()函数伪代码实现 log10()的实现通常基于换底公式: ,因为直接实现常用对数的效率低于复用已有的自然对数函数 pH值、震级等工程换算 特殊值结果 exp(0)=1.0;exp(+∞)=+∞ log(1)=0.0;log(e)=1.0 log10(1)=0.0;log10(10)=1.0 七、经典面试题 指数与对数函数是
int rev[MAXN], GPow[MAXN], GiPow[MAXN], A[MAXN], B[MAXN], C[MAXN], D[MAXN], lim; const int G = 3,
假设有底数为2和3的两个对数函数,如上图。当X取N(数据规模)时,求所对应的时间复杂度得比值,即对数函数对应的y值,用来衡量对数底数对时间复杂度的影响。 比值为log2 N / log3 N,运用换底公式后得:(lnN/ln2) / (lnN/ln3) = ln3 / ln2,ln为自然对数,显然这三个常数,与变量N无关。 用文字表述:算法时间复杂度为log(n)时,不同底数对应的时间复杂度的倍数关系为常数,不会随着底数的不同而不同,因此可以将不同底数的对数函数所代表的时间复杂度,当作是同一类复杂度处理,即抽象成一类问题。 当然这里的底数2和3可以用a和b替代,a,b大于等于2,属于整数。a,b取值是如何确定的呢? 有点编程经验的都知道,分而治之的概念。 排序算法中有一个叫做“归并排序”或者“合并排序”的算法,它用到的就是分而治之的思想,而它的时间复杂度就是N*logN,此算法采用的是二分法,所以可以认为对应的对数函数底数为2,也有可能是三分法,底数为3
假设有底数为2和3的两个对数函数,如上图。当X取N(数据规模)时,求所对应的时间复杂度得比值,即对数函数对应的y值,用来衡量对数底数对时间复杂度的影响。 比值为log2 N / log3 N,运用换底公式后得:(lnN/ln2) / (lnN/ln3) = ln3 / ln2,ln为自然对数,显然这三个常数,与变量N无关。 用文字表述:算法时间复杂度为log(n)时,不同底数对应的时间复杂度的倍数关系为常数,不会随着底数的不同而不同,因此可以将不同底数的对数函数所代表的时间复杂度,当作是同一类复杂度处理,即抽象成一类问题。 当然这里的底数2和3可以用a和b替代,a,b大于等于2,属于整数。a,b取值是如何确定的呢? 有点编程经验的都知道,分而治之的概念。 排序算法中有一个叫做“归并排序”或者“合并排序”的算法,它用到的就是分而治之的思想,而它的时间复杂度就是N*logN,此算法采用的是二分法,所以可以认为对应的对数函数底数为2,也有可能是三分法,底数为3
[wmi464x36s.png] 3 第三种方法,我们将词典一分为2,然后查找单词,如果没找到,则继续一分为2。这个方法的复杂度是。 [rxd1d8mwf2.png] 现在我们有了这3种算法,我们需要知道哪个算法更快。 最好的方法是计算函数是怎样增长的。 3 而对数方法只需要增加1步来计算2000页词典。 下图可以更好的理解这3个函数的不同。显然是性能最好的。 [w92nkmin4r.png] 对数函数在不同量级的表现 有趣的是对数并不总是最优的,比如函数和函数。 第一张图展现了对数函数的增长比二次方要慢很多。 [fejs5cekfu.png] 然而,更仔细的看一下,如果输入数据比较小,那么对数函数会比二次方函数要快一点。
现在让我们继续探讨对数函数的概念。前面讲解了指数函数,对数函数则是指数函数的逆运算。如果有一个指数函数表达式为y = a^x ,那么它的对数表达式就是x = log_a y 。 然而,当我们转而讨论对数函数时,其表示形式导致了这一点被调换至( (1,0) ),因此对于对数函数而言,它的恒过点即为( (1,0) )。 剩下关于对数的变换我就不再详细讲解了。 离婚了 0.1 I(x_3) = -ln^{0.1}= 2.30 从上面的例子可以看出,如果一个事件的概率很低,那么它所带来的信息量就会很大。 因为对数函数的特性是,其参数 ( x ) 可以无限接近于0,但不能等于0。因此,如果参数等于0,就会导致对数函数计算时出现错误或无穷大的情况。 在讨论中,我们还回顾了指数和对数函数的基本概念,这些函数在交叉熵的定义和理解中起着重要作用。指数函数展示了指数级增长的特性,而对数函数则是其逆运算,用于计算相对熵和交叉熵函数中的对数项。
对数函数(log) 对数的定义:一般地,如果ax=N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x=logaN,读作以a为底N的对数,其中a叫做对数的底数,N叫做真数。 一般地,函数y=logax(a>0,且a≠1)叫做对数函数,也就是说以幂(真数)为自变量,指数为因变量,底数为常量的函数,叫对数函数。 2.x%n的结果 x%n的结果是[0,n-1]的一个整数 3.n!的结果 n! = 1*2*3*4*...*n n!
自然对数函数ln(x),当x为正实数,且n趋向于无穷大时,自然对数函数的泰勒级数收敛于0。 自然对数函数的泰勒展开式 x的取值范围不同,ln(x)的泰勒展开式也不同。 下图泰勒展开式取前3项,在ln(3)邻域内的拟合效果就不是很好。 % 定义符号变量x,y,f syms x y f; % 定义自然对数函数 % ln(x)在matlab为log(x) y = log(x); % 应用matlab的taylor函数获取log(3)泰勒展开式前 10项 f = taylor(y,x,3,'order',10); % log(3)邻域内内创建100个点 t = linspace(2,4,100); % 使用t替换符号变量 f1=subs(f,'x
)=\cos(\theta+m) \tag{3} 对于上述公式2和公式3, m 是损失函数的超参数,它表示余弦空间和角度空间中的边界。 X2-Softmax损失函数的对数函数曲线如图3所示。 对于二分类问题,当面特征 x_{i} 被分类到第一类时,决策边界为 f_{R}(\theta_{1})=\cos(\theta_{2}) 。 在MS1Mv3中,作者选择了所有超过120张图像的身份,并提取了它们的脸特征。 本文中使用的训练集是MS1Mv3,它近年来被广泛用于人脸识别解决方案。MS1Mv3基于MS-Celeb-1M数据集,包含约10M张图像和100k个身份。 超参数 h 表示对数函数曲线顶点的水平坐标。随着超参数 h 的减小,对数函数曲线向左移动,对数函数曲线与余弦函数曲线之间的差异增加,这意味着角边界同时增加。
此外,也很乏味 同一函数的对数函数的一阶导数要简单得多: ? 二阶导数也很简单: ? 当你实际使用对数时,你会得到一个不同的函数。 你走路和开车时不需要走相同的路线。 这正是一个函数和该函数的对数函数共同之处:相同的参数可以最小化损失函数。 对这个函数和它对数函数同时求导就得到损失函数的最小值。 一个数学证明 我们来证明一个使函数最小化的参数等于这个函数的对数函数的最小化的参数。 ? 它的对数函数是: ? 部分图像如下: ? 可以看到,在这两种情况下,函数的最大值都是当x=0.3时取得。 是的,我们没有得到相同的函数,但是我们仍然有相同的临界点来帮助我们最小化损失函数。 一句话总结:一个函数和该函数的对数函数有一个共同之处,就是最小化的参数是相同的,对数求导要简单很多,会加快我们的计算速度。 deephub翻译组:gkkkkkk DeepHub
例如,$x^2$ 表示 $x$ 的平方,$x^3$ 表示 $x$ 的立方。当指数 $n$ 为负数时,幂函数表示计算底数 $x$ 的倒数的绝对值乘以自身 $n$ 次的结果。 例如,在 Python 中,2 ** 3 表示 $2$ 的 $3$ 次幂,结果为 $8$。指数函数计算可以使用指数函数库,如 exp()。 对数函数:对数函数是形如 f(x) = logₐ(x) 的函数,其中 a 是对数的底。对数函数的图像是一个从左向右递增的曲线。对数函数的特点是 x 的增加对应着 y 增长速度逐渐减慢。 对数函数常用于描述倍增现象,例如霍夫曼编码和指数增长模型。 除了上述函数类型外,还有三角函数、双曲函数、阶乘函数等。这些函数在数学和科学领域中具有广泛的应用。
就返回true 否则返回false asin(x) 反正弦三角函数 atan(x) 反正切三角函数 atan2(y, x) 返回y/x的反正切值 ceil(x) 向上取整 例如x为2.4 函数返回值为3 判断是否为有限数 isinf(x) 判断是否为无限数 isnan(x) 判断是否为非数值(NaN) ldexp(x, n) 返回x * 2^n的值 lerp(a, b, t) 插值函数 log(x) 对数函数 log2(x) 对数函数 log10(x) 对数函数 max(a, b) 取最大值 min(a, b) 取最小值 mul(x, y) 矩阵相乘函数 noise(x) 噪声函数,通过柏林噪音算法生成一个随机值
这些数学函数包含了许多常见的数学运算,如三角函数、指数函数、对数函数、统计函数等。本文将介绍NumPy中一些常用的数学函数及其用法,展示NumPy在数值计算方面的强大功能。 加法result = np.add(arr, 2)print(result) # [4 6 8]# 减法result = np.subtract(arr, 1)print(result) # [1 3 5]# 乘法result = np.multiply(arr, 3)print(result) # [6 12 18]# 除法result = np.divide(arr, 2)print(result ) # [1. 2. 3.]三角函数NumPy提供了一系列的三角函数,如正弦、余弦、正切等。 inf -0.]指数和对数函数NumPy提供了指数函数(如幂函数和指数函数)以及对数函数(如自然对数和以2为底的对数)。这些函数可用于计算数值的幂、指数和对数值。
带负号的对数函数显然符合以上要求,当然,肯定有其他函数也会符合以上要求,对此,香农在《A Mathematical Theory of Communication》(通信的数学理论)这篇论文中有说明选择对数函数的原因 而最自然的选择是对数函数。 关于对数函数更便捷的原因,论文中给出了3点: 在实践中更有用。 ,而其对数则是加倍(log2 1,log2 2,log2 4,log2 8,...)=(0,1,2,3,...) 更贴近于人类对度量的直觉。 线性比较就是人类的度量直觉。 那么,为什么选择2为底的对数呢,论文中的解释是这样的: [s8ajda8l11.png] [v9z3mkglbe.png] 大致意思是说选择什么为底与用什么单位来度量信息是对应的。 因此,在一些机器学习算法比如ID3决策树中就常用信息熵来量化数据集的纯度,以选择出更好的特征来划分数据,让划分出的数据子集越来越纯,最终就可以根据多数表决来决定叶子节点的分类,从而构建出完整的分类决策树
3. 交叉熵损失函数在计算中通常会涉及对数运算,而对数函数在定义域上有限制。对数函数的定义域是正实数,即输入值必须大于零。 在李沐老师的本节中,如果交叉熵损失函数的计算结果中包含负数或零,将会导致问题。 因此,如果在直接实现基于交叉熵损失函数的代码中,没有处理对数函数定义域的限制,可能会导致错误或异常,特别是在涉及预测值与真实值之间差异较大的情况下。 3.请想一个解决方案来解决上述两个问题。 对数函数定义域问题:在计算交叉熵损失函数时,添加一个小的平滑项。可以在对数函数的输入上加上一个较小的常数,例如(如10的-8次方),以确保避免出现负数或零。 这样可以避免对数函数在定义域之外的值上计算,确保损失函数的计算结果正确。
稀释曲线估计 3. 种-面积关系 长期以来人们一直在争论,在何种情况下,用幂函数或对数函数。 大多数研究都倾向于幂函数。 幂函数和对数模型都可能提供丰富度的上限和下限,但外推到更大的区域的时候对数函数往往低估丰富度。 幂函数模型和对数模型: 4.
带负号的对数函数显然符合以上要求,当然,肯定有其他函数也会符合以上要求,对此,香农在《A Mathematical Theory of Communication》(通信的数学理论)这篇论文中有说明选择对数函数的原因 而最自然的选择是对数函数。 关于对数函数更便捷的原因,论文中给出了3点: 在实践中更有用。 对数函数可以让一些工程上非常重要的参数比如时间、带宽、继电器数量等与可能性的数量的对数成线性关系,例如,增加一个继电器会使继电器的可能状态数加倍,而如果对这一可能状态数求以2为底的对数,结果只是加 1。 ,而其对数则是加倍(log2 1,log2 2,log2 4,log2 8,...)=(0,1,2,3,...) 更贴近于人类对度量的直觉。 线性比较就是人类的度量直觉。 因此,在一些机器学习算法比如ID3决策树中就常用信息熵来量化数据集的纯度,以选择出更好的特征来划分数据,让划分出的数据子集越来越纯,最终就可以根据多数表决来决定叶子节点的分类,从而构建出完整的分类决策树