数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二、 拟合与优化
scipy
的optimize
模块提供了许多数值优化算法。求解非线性方程组:
scipy.optimize.fsolve(func, x0, args=(), fprime=None, full_output=0, col_deriv=0, xtol=1.49012e-08, maxfev=0, band=None, epsfcn=None, factor=100, diag=None)
func
:是个可调用对象,它代表了非线性方程组。给他传入方程组的各个参数,它返回各个方程残差(残差为零则表示找到了根)x0
:预设的方程的根的初始值args
:一个元组,用于给func
提供额外的参数。fprime
:用于计算func
的雅可比矩阵(按行排列)。默认情况下,算法自动推算full_output
:如果为True
,则给出更详细的输出col_deriv
:如果为True
,则计算雅可比矩阵更快(按列求导)xtol
:指定算法收敛的阈值。当误差小于该阈值时,算法停止迭代maxfev
:设定算法迭代的最大次数。如果为零,则为100*(N+1)
,N
为x0
的长度band
:If set to a two-sequence containing the number of sub- and super-diagonals within the band of the Jacobi matrix, the Jacobi matrix is considered banded (only for fprime=None)epsfcn
:采用前向差分算法求解雅可比矩阵时的步长。factor
:它决定了初始的步长diag
:它给出了每个变量的缩放因子
返回值:
x
:方程组的根组成的数组infodict
:给出了可选的输出。它是个字典,其中的键有:nfev
:func
调用次数njev
:雅可比函数调用的次数fvec
:最终的func
输出fjac
:the orthogonal matrix, q, produced by the QR factorization of the final approximate Jacobian matrix, stored column wiser
:upper triangular matrix produced by QR factorization of the same matrix
ier
:一个整数标记。如果为 1,则表示根求解成功mesg
:一个字符串。如果根未找到,则它给出详细信息
假设待求解的方程组为:
$ f_1(x_1,x_2,x_3)=0\\ f_2(x_1,x_2,x_3)=0\\ f_3(x_1,x_2,x_3)=0 $那么我们的
func
函数为:xxxxxxxxxx
def func(x): x1,x2,x3=x.tolist() # x 为向量,形状为 (3,) return np.array([f1(x1,x2,x3),f2(x1,x2,x3),f3(x1,x2,x3)])数组的
.tolist()
方法能获得标准的python
列表而雅可比矩阵为:
$ J=\begin{bmatrix} \frac{\partial f_1}{\partial x_1}&\frac{\partial f_1}{\partial x_2}&\frac{\partial f_1}{\partial x_3}\\ \frac{\partial f_2}{\partial x_1}&\frac{\partial f_2}{\partial x_2}&\frac{\partial f_2}{\partial x_3}\\ \frac{\partial f_3}{\partial x_1}&\frac{\partial f_3}{\partial x_2}&\frac{\partial f_3}{\partial x_3}\\ \end{bmatrix} $xxxxxxxxxx
def fprime(x): x1,x2,x3=x.tolist() # x 为向量,形状为 (3,) return np.array([[df1/dx1,df1/dx2,df1/df3], [df2/dx1,df2/dx2,df2/df3], [df3/dx1,df3/dx2,df3/df3]])最小二乘法拟合数据:
xxxxxxxxxx
scipy.optimize.leastsq(func, x0, args=(), Dfun=None, full_output=0, col_deriv=0, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=None, factor=100, diag=None)func
:是个可调用对象,给出每次拟合的残差。最开始的参数是待优化参数;后面的参数由args
给出x0
:初始迭代值args
:一个元组,用于给func
提供额外的参数。Dfun
:用于计算func
的雅可比矩阵(按行排列)。默认情况下,算法自动推算。它给出残差的梯度。最开始的参数是待优化参数;后面的参数由args
给出full_output
:如果非零,则给出更详细的输出col_deriv
:如果非零,则计算雅可比矩阵更快(按列求导)ftol
:指定相对的均方误差的阈值xtol
:指定参数解收敛的阈值gtol
:Orthogonality desired between the function vector and the columns of the Jacobianmaxfev
:设定算法迭代的最大次数。如果为零:如果为提供了Dfun
,则为100*(N+1)
,N
为x0
的长度;如果未提供Dfun
,则为200*(N+1)
epsfcn
:采用前向差分算法求解雅可比矩阵时的步长。factor
:它决定了初始的步长diag
:它给出了每个变量的缩放因子
返回值:
x
:拟合解组成的数组cov_x
:Uses the fjac and ipvt optional outputs to construct an estimate of the jacobian around the solutioninfodict
:给出了可选的输出。它是个字典,其中的键有:nfev
:func
调用次数fvec
:最终的func
输出fjac
:A permutation of the R matrix of a QR factorization of the final approximate Jacobian matrix, stored column wise.ipvt
:An integer array of length N which defines a permutation matrix, p, such that fjacp = qr, where r is upper triangular with diagonal elements of nonincreasing magnitude
ier
:一个整数标记。如果为 1/2/3/4,则表示拟合成功mesg
:一个字符串。如果解未找到,则它给出详细信息
假设我们拟合的函数是 $ MathJax-Element-21 $ ,其中 $ MathJax-Element-27 $ 为参数。假设数据点的横坐标为 $ MathJax-Element-28 $ ,纵坐标为 $ MathJax-Element-29 $ ,那么我们可以给出
func
为:xxxxxxxxxx
def func(p,x,y): a,b,c=p.tolist() # 这里p 为数组,形状为 (3,); x,y 也是数组,形状都是 (N,) return f(x,y;a,b,c))其中
args=(X,Y)
而雅可比矩阵为 $ MathJax-Element-25 $ ,给出
Dfun
为:xxxxxxxxxx
def func(p,x,y): a,b,c=p.tolist() return np.c_[df/da,df/db,df/dc]# 这里p为数组,形状为 (3,);x,y 也是数组,形状都是 (N,)其中
args=(X,Y)
scipy
提供了另一个函数来执行最小二乘法的曲线拟合:xxxxxxxxxx
scipy.optimize.curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, bounds=(-inf, inf), method=None, **kwargs)f
:可调用函数,它的优化参数被直接传入。其第一个参数一定是xdata
,后面的参数是待优化参数xdata
:x
坐标ydata
:y
坐标p0
:初始迭代值sigma
:y
值的不确定性的度量absolute_sigma
: If False, sigma denotes relative weights of the data points. The returned covariance matrix pcov is based on estimated errors in the data, and is not affected by the overall magnitude of the values in sigma. Only the relative magnitudes of the sigma values matter.If True, sigma describes one standard deviation errors of the input data points. The estimated covariance in pcov is based on these values.check_finite
:如果为True
,则检测输入中是否有nan
或者inf
bounds
:指定变量的取值范围method
:指定求解算法。可以为'lm'/'trf'/'dogbox'
kwargs
:传递给leastsq/least_squares
的关键字参数。
返回值:
popt
:最优化参数pcov
:The estimated covariance of popt.
假设我们拟合的函数是 $ MathJax-Element-26 $ ,其中 $ MathJax-Element-27 $ 为参数。假设数据点的横坐标为 $ MathJax-Element-28 $ ,纵坐标为 $ MathJax-Element-29 $ ,那么我们可以给出
func
为:xxxxxxxxxx
def func(x,a,b,c): return f(x;a,b,c)#x 为数组,形状为 (N,)求函数最小值:
xxxxxxxxxx
scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)fun
:可调用对象,待优化的函数。最开始的参数是待优化的自变量;后面的参数由args
给出x0
:自变量的初始迭代值args
:一个元组,提供给fun
的额外的参数method
:一个字符串,指定了最优化算法。可以为:'Nelder-Mead'
、'Powell'
、'CG'
、'BFGS'
、'Newton-CG'
、'L-BFGS-B'
、'TNC'
、'COBYLA'
、'SLSQP'
、'dogleg'
、'trust-ncg'
jac
:一个可调用对象(最开始的参数是待优化的自变量;后面的参数由args
给出),雅可比矩阵。只在CG/BFGS/Newton-CG/L-BFGS-B/TNC/SLSQP/dogleg/trust-ncg
算法中需要。如果jac
是个布尔值且为True
,则会假设fun
会返回梯度;如果是个布尔值且为False
,则雅可比矩阵会被自动推断(根据数值插值)。hess/hessp
:可调用对象(最开始的参数是待优化的自变量;后面的参数由args
给出),海森矩阵。只有Newton-CG/dogleg/trust-ncg
算法中需要。二者只需要给出一个就可以,如果给出了hess
,则忽略hessp
。如果二者都未提供,则海森矩阵自动推断bounds
:一个元组的序列,给定了每个自变量的取值范围。如果某个方向不限,则指定为None
。每个范围都是一个(min,max)
元组。constrants
:一个字典或者字典的序列,给出了约束条件。只在COBYLA/SLSQP
中使用。字典的键为:type
:给出了约束类型。如'eq'
代表相等;'ineq'
代表不等fun
:给出了约束函数jac
:给出了约束函数的雅可比矩阵(只用于SLSQP
)args
:一个序列,给出了传递给fun
和jac
的额外的参数
tol
:指定收敛阈值options
:一个字典,指定额外的条件。键为:maxiter
:一个整数,指定最大迭代次数disp
:一个布尔值。如果为True
,则打印收敛信息
callback
:一个可调用对象,用于在每次迭代之后调用。调用参数为x_k
,其中x_k
为当前的参数向量
返回值:返回一个
OptimizeResult
对象。其重要属性为:x
:最优解向量success
:一个布尔值,表示是否优化成功message
:描述了迭代终止的原因
假设我们要求解最小值的函数为: $ MathJax-Element-31 $ ,则雅可比矩阵为:
$ \left[\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y}\right] $则海森矩阵为:
$ \begin{bmatrix} \frac{\partial^{2} f(x,y)}{\partial x^{2}}&\frac{\partial^{2} f(x,y)}{\partial x\partial y}\\ \frac{\partial^{2} f(x,y)}{\partial y\partial x}&\frac{\partial^{2} f(x,y)}{\partial y^{2}} \end{bmatrix} $于是有:
xxxxxxxxxx
def fun(p): x,y=p.tolist()#p 为数组,形状为 (2,) return f(x,y) def jac(p): x,y=p.tolist()#p 为数组,形状为 (2,) return np.array([df/dx,df/dy]) def hess(p): x,y=p.tolist()#p 为数组,形状为 (2,) return np.array([[ddf/dxx,ddf/dxdy],[ddf/dydx,ddf/dyy]])常规的最优化算法很容易陷入局部极值点。
basinhopping
算法是一个寻找全局最优点的算法。xxxxxxxxxx
scipy.optimize.basinhopping(func, x0, niter=100, T=1.0, stepsize=0.5, minimizer_kwargs=None,take_step=None, accept_test=None, callback=None, interval=50, disp=False, niter_success=None)func
:可调用函数。为待优化的目标函数。最开始的参数是待优化的自变量;后面的参数由minimizer_kwargs
字典给出x0
:一个向量,设定迭代的初始值niter
:一个整数,指定迭代次数T
:一个浮点数,设定了“温度”参数。stepsize
:一个浮点数,指定了步长minimizer_kwargs
:一个字典,给出了传递给scipy.optimize.minimize
的额外的关键字参数。take_step
:一个可调用对象,给出了游走策略accept_step
:一个可调用对象,用于判断是否接受这一步callback
:一个可调用对象,每当有一个极值点找到时,被调用interval
:一个整数,指定stepsize
被更新的频率disp
:一个布尔值,如果为True
,则打印状态信息niter_success
:一个整数。Stop the run if the global minimum candidate remains the same for this number of iterations.
返回值:一个
OptimizeResult
对象。其重要属性为:x
:最优解向量success
:一个布尔值,表示是否优化成功message
:描述了迭代终止的原因
假设我们要求解最小值的函数为: $ MathJax-Element-31 $ ,于是有:
xxxxxxxxxx
def fun(p): x,y=p.tolist()#p 为数组,形状为 (2,) return f(x,y)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论