机器学习基础之参数估计

机器学习基础之参数估计 一、参数估计 对所要研究的随机变量$\xi$,当它的概率分布的类型已知,但是参数未知,比如$\xi$服从正太分布$N(\alpha, \sigma)$。但是$\alpha, \sigma$这两个参数未知。那么这么确定这些未知参数呢?我们可以通过采样的方式,得到一批样本数据,用样本的统计量来估计总体的统计量。那么这种方式就是参数估计。 我们先来看一种简单的估计。 矩法估计:设总体$\xi$的分布函数$F(x; \theta_1,\theta_2, …, \theta_l)$中$l$个未知参数$\theta_1,\theta_2, …, \theta_l$。假定总体$\xi$的$l$阶原点绝对矩有限,并记$v_k=E(\xi^k) (k=1,2,…,l)$。现用样本的k阶原点矩来作为总体的k阶矩的估计量$\hat{v}_k$。即 $v_k=\hat{v}k=\frac{1}{n}\sum{i=1}^n\xi_i^k$ 那么通过样本的估计量,我们就可以估计出总体的一些参数。 比如假设$\xi$服从一个分布(不管什么分布),$E(\xi)=\alpha, D(\xi)=\sigma^2$。但其值未知,则由样本的一阶矩、二阶矩 $\hat{v}1=\frac{1}{n}\sum{i=1}^n\xi_i=\overline{\xi}$ $\hat{v}2=\frac{1}{n}\sum{i=1}^n\xi^2_i$ 总体的一阶矩、二阶矩 $v_1=E(\xi^1)=\alpha, v_2=E(\xi^2)=D(\xi)+(E(\xi))^2=\sigma^2+\alpha^2$ 令$v_1=\hat{v}_1, v_2=\hat{v}_2$, 就可以解出参数$\alpha, \sigma$的值. $\hat{\alpha}=\overline{\xi}\ \hat{\sigma^2}=\frac{1}{n}\sum_{i=1}^n\xi^2_i-(\overline{\xi}^2)=\frac{1}{n}\sum_{i=1}^n(\xi_i-\overline{\xi})^2=S^2$ 二、极大似然估计(Maximum Likelihood Estimate) 矩法估计要求随机变量$\xi$的原点矩存在。再者,样本矩的表达式用总体$\xi$的分布函数表达式无关,因此矩法估计没有充分利用分布函数对参数提供的信息。所以很多时候我们采用极大似然估计 (极大似然估计)设总体的$\xi$的密度函数为$f(x;\theta_1, \theta_2, …, \theta_l)$,其中$\theta_1, \theta_2, …, \theta_l$为未知参数。$\xi_1, \xi_2, …, \xi_n$为样本,它的联合密度函数为$f(x_1, x_2, …, x_n;\theta_1, \theta_2, …, \theta_l)$。 称 $L(\theta_1, \theta_2, …, \theta_l)=\prod_{i=1}^nf(x_i; \theta_1, \theta_2, …, \theta_l)$为$\theta_1, \theta_2, …, \theta_l$的似然函数。若有$\hat{\theta_1}, \hat{\theta_2}, …, \hat{\theta_l}$使得下试成立: $L(\hat{\theta_1}, \hat{\theta_2}, …, \hat{\theta_l})=max {L(\theta_1, \theta_2, …, \theta_l)}$, 则称$\hat{\theta_1}, \hat{\theta_2}, …, \hat{\theta_l}$为为参数$\theta_1, \theta_2, …, \theta_l$的极大似然估计量...

九月 4, 2022 · 1 分钟 · Pan

机器学习基础之反向传播

机器学习基础二-反向传播 神经网络之所以可以训练,得益于与Hinton在1986年提出的反向传播算法。反向传播背后的数学原理就是链式法则。本文会具体的实例来演示反向传播具体的计算过程,让大家有一个实际的印象。文中公式都是一个字符一个字符敲出来的,转载请注明出处。文中参考了其他作者的一些例子和数据,均在参考文献中列出。 一个简单的两层神经网络如上图所示。其中 $i_1, i_2$ : 训练时候实际的输入 $o_1, o_2$ : 训练时候实际的输出(ground truth) $out_{o1}, out_{o2}$: 模型预测的结果 我们的目的就是通过反向传播,更新模型的参数$w_i,b_i$, 使得$out_{o1}, out_{o2}$尽可能的逼近$o_1, o_2$。 本例中激活函数用$sigmod(x)=\frac{1}{1+e^{-x}}$; 损失函数用$L_2=\frac{1}{2} \times (target-output)^2$ 前向传播 隐藏层计算 $net_{h1}=w_1 \times i_1+w_2 \times i_2+b_1=0.15 \times 0.05+0.2 \times 0.1+0.35=0.3775$ $out_{h1}=sigmod(net_{h1})=\frac{1}{1+e^{-0.3775}}=0.593269992$ 同理 $out_{h2}=0.596884378$ 输出层计算 $net_{o1}=w_5 \times out_{h1}+w_6m \times out_{h2}+b_2\=0.4 \times 0.593269992+0.45 \times 0.596884378=1.105905967$ $out_{o1}=sigmod(net_{o1})=0.75136507$ 同理 $out_{o2}=0.772928465$ 最终我们看到前向传播的结果为(0.75136507,0.772928465)与我们的目标(0.01,0.99)差的比较多,所以接下来用反向传播算法学习 反向传播 要想反向传播,还需要两步(1)计算损失,(2)计算梯度。过程如下图所示 总的损失$E_{total}=E_{o1}+E_{o2}$,其中 $$\begin{align} E_{o1} &=\frac{1}{2}(target_{o1}-out_{o1})^2 \\ &= \frac{1}{2}(0.01-0.75136507)^2=0.274811083 \end{align}$$ $$E_{o2}=\frac{1}{2}(target_{o2}-out_{o2})^2=0.023560026$$ $$E_{total}=E_{o1}+E_{o2}=0.274811083+0.023560026=0.298371109 $$ 计算参数$w_5$的梯度 根据链式法则,公式如下: $\frac{\partial E_{total}}{\partial w_5}=\frac{\partial E_{total}}{\partial out_{o1}} \times \frac{\partial out_{o1}}{\partial net_{o1}} \times \frac{\partial net_{o1}}{\partial w_5}$...

九月 4, 2022 · 2 分钟 · Pan

深度学习中的各种tricks

深度学习tricks汇总 网络结构 FPN(Feature Pyramid Networks )、SPP(spatial pyramid pooling)、ASPP(atrous spatial pyramid pooling)、FPN(Feature Pyramid Networks )、PAN(Pyramid Attention Network)、PSP(Pyramid Scene Parsing)或者Pyramid pooling module SPP 主要用于图像分类和目标检测中,其实和PSP网络结构设计思想一样(SPP提出在前,PSP提出在后),PSP用于语义分割 PSP、PPM 使用不同尺度的pooling操作(论文中最终输出的特征图尺寸为1*1,2*2,3*3,6*6),然后使用1*1的卷积将channel数降为原来的1/N (这里的N为4,目前是不过多的增加计算量),然后分别将输出上采样到原特征图大小,再concat拼接到一起 FPN FPN如上图(d)所示 PAN 整体结构: 其中 FPA结构: 其中: GAU结构: 参考文档: https://medium.com/mlearning-ai/review-pan-pyramid-attention-network-for-semantic-segmentation-semantic-segmentation-8d94101ba24a 参考代码: https://github.com/JaveyWang/Pyramid-Attention-Networks-pytorch 深度可分离卷积 损失函数 focal loss $FL(p)=-(1-p)^\gamma log(p)$ 其中p为经过softmax后的输出。 当预测结果p越接近正确分类(接近1)的时候,会在原损失的基础上乘上$(1-p)^\gamma$的权重,该权重是一个比较小的值;相反如果预测结果p偏离正确分类的比较离谱,比如p结果0,那么$(1-p)^\gamma$就会比较大(相比于容易分的样本权重)。所以focal loss 在处理样本不均衡时候是一个比较不错的选择 smooth l1 loss $$loss = \left{ \begin{matrix} 0.5x^2, 当 x<1\ |x|-0.5, otherwise \end{matrix} \right. $$ 改进了l2loss对异常比较敏感的问题(因为平方放大异常点的损失) 改进l1loss在零点不可能的问题 训练策略 学习率warmup Warmup策略顾名思义就是让学习率先预热一下,在训练初期我们不直接使用最大的学习率,而是用一个逐渐增大的学习率去训练网络,当学习率增大到最高点时,再使用学习率下降策略中提到的学习率下降方式衰减学习率的值 学习率 在整个训练过程中,我们不能使用同样的学习率来更新权重,否则无法到达最优点,所以需要在训练过程中调整学习率的大小。 参考百度总结的一些训练技巧...

四月 27, 2022 · 1 分钟 · Pan

matplotlib画图

matplotlib基本使用 画板figure,画纸Sublpot画质,可多图绘画 画纸上最上方是标题title,用来给图形起名字 坐标轴Axis,横轴叫x坐标轴label,纵轴叫y坐标轴ylabel 图例Legend 代表图形里的内容 网格Grid,图形中的虚线,True显示网格 Markers:表示点的形状 常用图形 scatter:散点图 plot: 折线图 bar: 柱状图 heat:热力图 box:箱线图 hist:直方图 pie:饼图 area:面积图 基本步骤 def base_plot(): x = np.arange(-1000, 1000, 1) y = x * x # plt.plot(x, y, color='r', marker='o', linestyle='dashed') plt.plot(x, y, '.r', linestyle='dashed') # 使用format格式,与上面含义相同 plt.xlabel('X') plt.ylabel('y = x^2') plt.axis([-100, 100, 0, 100]) # 设置坐标轴范围 plt.show() 多图绘制 使用Python创建多个画板和画纸来绘制多幅图,如果事先不声明画板画板,默认是创建一个画板一个画纸 使用figure()方法创建画板1 使用subplot()方法创建画纸,并选择当前画纸并绘图 同样用subplot()方法选择画纸并绘图 def base_subplot(): fig = plt.figure(1) # 创建画板 ax1 = plt.subplot(2, 1, 1) # 创建画纸(子图), 三个数字,前两个表示创建1*1的画纸,第三个表示选择第一个画纸 plt....

十二月 19, 2021 · 1 分钟 · pan

关于变换

做图像处理或者数据增强的过程中,经常需要用得各种变换来处理图片。本文详细的说明了线性变换、仿射变换、透视变换的定义、几何意义、学习表达。重点给出透视变换的计算过程,并给出python实现代码。经验证和opencv的结果是一样的。 虽然opencv或者其他的库有现成的函数可供调用,但是我们还是需要明白这些函数输出的意义。比如opencv的getAffineTransform返回一个2*3的矩阵,这个2*3矩阵的意义是什么? 线性变换是仿射变换的特例,仿射变换是透视变换的特例 一、线性变换 1.1线性变换的定义 如果$f: V->W$满足如下两条性质,那么$f$就是线性变换 可加性(additivity):$f(x+y) = f(x)+f(y)$ 齐次性(homogeneity):$f(ax) = af(x)$ 当然也可以把这两个性质合并一下, 对任意的$a$下式总成立: $f(x+ay)=f(x)+af(y)$ 那么思考一下下面两个变换是不是线性变换 (1)$f(x,y) = x+2y$ (2)$f(x,y) = x+1$ 第一式子是线性变换,但是第二个式子是不满足齐次性的。因为$f(ax)=ax+1 ≠ a(x+1)$ 从齐次性可以看出,线性变换一定是过零点的 1.2线性变换的几何意义 满足如下几何性质 变换前是直线的,变换后依然是直线 直线比例保持不变 变换前是原点的,变换后依然是原点 二、仿射变换 2.1 仿射变换的几何意义 仿射变换从几何意义看不需要满足线性变换的第三点,即仿射变换满足如下两点即可 变换前是直线的,变换后依然是直线 直线比例保持不变 三、常见的变换 (Identity)恒等变换 (Translation)平移变换 (Rotation)旋转变换 (Scaling)尺度变换 (Reflection)反射变换 (Shear)错切 示意图如下 图片from 仿射变换及其变换矩阵的理解 在上面所有的变换中只有平移变换不是线性变换(不满足齐次性),其他的都是线性变换 所以仿射变换就是线性变换+平移 四、仿射变换和线性变换的数学表达 $Y = AX+b$ 其中A是一个m*n的矩阵,b是一个n维的向量。 其中 A表示线性变换,b表示平移 。A,b合在一起就可以表示一个仿射变换 上式可以写如下两个形式,用矩阵的方式方便计算 1、 $$Y = [A|b]*\left[\begin{matrix}X\\1 \end{matrix}\right]$$ 2、 $$ \left[\begin{matrix}Y\\1 \end{matrix}\right] = \left[\begin{matrix}A & b \\0 & 1 \end{matrix}\right] * \left[\begin{matrix}X\\1 \end{matrix}\right] $$...

十一月 29, 2021 · 2 分钟 · pan