梯度

梯度提升与梯度下降

随声附和 提交于 2020-01-15 00:00:55
梯度提升与梯度下降 梯度是什么 梯度是谁的 梯度下降 梯度提升 总结 梯度是什么 “梯度提升”与“梯度下降”中的“梯度”是什么?梯度是损失函数对需要求解的模型参数的导数。梯度方向是参数导数中绝对值最大的方向,因此梯度方向有两个,一个是梯度最大方向,另一个是梯度最小方向。 梯度是谁的 “梯度”是目标函数在当前点的梯度(不是参数的梯度),因此有了目标函数、样本点,才会有梯度。 梯度下降 在参数空间中,梯度下降是指目标函数在当前点的取值下降(最小化目标函数),参数自身沿着负梯度的方向下降。因此梯度下降,是目标函数对最优参数的搜索,其变量是参数。 梯度下降通常用来求解这种无约束最优化问题,它是一种迭代方法:初选取参数初值(还包括算法终止距离参数和学习率参数),不断迭代,更新参数的值,进行损失函数的最小化。 为什么梯度的负方向是函数局部下降最快的方向?下面开始证明。 假设迭代公式为: θ t = θ t − 1 + Δ θ \theta_{t}=\theta_{t-1}+\Delta \theta θ t ​ = θ t − 1 ​ + Δ θ ,将 L ( θ t ) L\left(\theta_{t}\right) L ( θ t ​ ) 在 θ t − 1 \theta_{t-1} θ t − 1 ​ 处进行泰勒展开: L ( θ t ) = L ( θ t − 1 + Δ θ ) ≈

集成算法之Light GBM

烈酒焚心 提交于 2020-01-14 19:51:04
一、Light GBM Light GBM是和xgboost类似的一种集成算法。xgboost算法的一个瓶颈是针对每个特征,它都需要对每一个可能的分裂点扫描全部的样本来计算基尼系数,这样大大增加了计算量,降低了算法效率。为了解决这种在大样本高纬度数据的环境下耗时的问题,Light GBM算法使用直方图方法在牺牲一定精度的条件下,换取计算速度的提升和内存的消耗;主要使用如下两种方法:一是GOSS(Gradient-based One-Side Sampling, 基于梯度的单边采样),不是使用所用的样本点来计算梯度,而是对样本进行采样来计算梯度;二是EFB(Exclusive Feature Bundling, 互斥特征捆绑) ,这里不是使用所有的特征来进行扫描获得最佳的切分点,而是将某些特征进行捆绑在一起来降低特征的维度,是寻找最佳切分点的消耗减少。这样大大的降低的处理样本的时间复杂度,但在精度上,通过大量的实验证明,在某些数据集上使用Lightgbm并不损失精度,甚至有时还会提升精度。 二、直方图算法(Histogram-based Alogrithm) 直方图优化算法需要在训练前预先把特征值转化为bin,也就是对每个特征的取值做个分段函数,将所有样本在该特征上的取值划分到某一段(bin)中,最终把特征取值从连续值转化成了离散值。 第一个 for

随机梯度下降

喜夏-厌秋 提交于 2020-01-14 07:08:28
激活函数 激活函数用来加入非线性因素,解决线性模型所不能解决的问题 原始激活函数:阈值函数(大于0为1,小于0为0) 缺点不可导 改进激活函数: sigmoid(0~1之间) f ( x ) = σ ( x ) = 1 1 + e − x f(x)=\sigma(x)=\frac{1}{1+e^{-x}} f ( x ) = σ ( x ) = 1 + e − x 1 ​ 优点是可导且易导: σ ′ = σ ( 1 − σ ) \sigma^{\prime}=\sigma(1-\sigma) σ ′ = σ ( 1 − σ ) 缺点是会在两端会出现长时间loss保持不变 torch . sigmoid ( a ) Tanh f ( x ) = tanh ⁡ ( x ) = ( e x − e − x ) ( e x + e − x ) = 2 sigmoid ⁡ ( 2 x ) − 1 \begin{aligned} f(x) &=\tanh (x)=\frac{\left(e^{x}-e^{-x}\right)}{\left(e^{x}+e^{-x}\right)} \\ &=2 \operatorname{sigmoid}(2 x)-1 \end{aligned} f ( x ) ​ = tanh ( x ) = ( e x + e − x ) ( e x − e − x )

吴恩达深度学习课程疑难点笔记系列-改善深层神经网络-第1周

时光怂恿深爱的人放手 提交于 2020-01-14 00:26:34
本笔记系列参照吴恩达深度学习课程的视频和课件,并在学习和做练习过程中从CSDN博主 何宽 分享的文章中得到了帮助,再此表示感谢。 本周主要学习的内容有: 训练/开发/测试机、偏差/方差、机器学习基础、正则化、为什么正则化可以减少过拟合?、Dropout正则化、理解Dropout、其它正则化方法、正则化输入、梯度消失与梯度爆炸、神经网络的权重初始化、梯度的数值逼近、梯度检验、关于梯度检验实现的注记。 本周学习的主要疑难点: 1.偏差和方差 偏差和方差是针对泛化(Generalization)而言的,模型训练的过程是一个不断减小误差函数(Loss Function)的过程。而模型在训练数据集上取得的最小误差函数值与一般数据集(或者测试数据集)上取得的最小误差函数值的差异叫泛化误差(generalization error)。 泛化误差可以分解为偏差、方差和噪声之和。具体数学公式的推导可以查看西瓜书2.5节的推导过程。 偏差(Bias):度量了学习算法的期望预测与真实结果的偏离程度,即 刻画了学习算法本身的拟合能力 。 方差(Variance):度量了同样大小的训练集的变动所导致的学习性能的变化,即 刻画了数据扰动所造成的影响 。 噪声(Noise):表达了当前任务上学习任何算法所能达到的期望泛化误差的下届,即 刻画了学习问题本身的难度 我们可以从图1来理解偏差和方差的区别 图 1 图1

ML_learning02:线性回归

好久不见. 提交于 2020-01-13 23:09:33
理解线性模型: 是一种函数 目标是预测 从一个属性的线性组合中来学习 具备很好的 可解释性 :每个样本都给予了相应的权重表示重要性 线性回归 数据集:D={(x1,y1),(x2,y2),…,(xn,yn)}, 其中xi=(xi1;xi2;xi3;…;xid),yi∈Rxi=(xi1;xi2;xi3;…;xid),yi∈R 线性回归试图从样本X学得一个线性模型–>尽可能准确的预测实值输出Y, f ( x i ) = w x i + b f\left(x_i\right)=wx_i+b f ( x i ​ ) = w x i ​ + b 使得 f ( x i ) ≈ y i f(x_i)\approx y_i f ( x i ​ ) ≈ y i ​ 1、将f(x)与y之间的差别最小化 性能度量是衡量模型泛化能力的评价标准。 均方误差(MSE:mean squared error)是回归任务中最常用的性能度量, E ( w ) = 1 m ∑ i = 1 m ( f w ( x i ) − y i ) 2 E\left(w\right)=\frac1m\sum_{i=1}^m\left(f_w\left(x_i\right)-y_i\right)^2 E ( w ) = m 1 ​ i = 1 ∑ m ​ ( f w ​ ( x i ​ ) − y i ​ ) 2 使用MSE的原因

Opencv特征提取与检测学习01

我的未来我决定 提交于 2020-01-13 14:31:40
Opencv特征提取与检测学习01:Harris角点检测 1.什么是harris角点检测 harris角点检测是harris于1998年提出的检测图片角点位置的一个理论。 具体理论(我的理解) 如上图,W是我们定义的图像窗口,W(x,y)是窗口一个像素值,后面的一串是像素梯度。 当采取近似计算时,E(u,v) 约等于下面的这个式子。 Ix 2 ,Iy 2 是图像像素点在x、y方向的二阶梯度,Ix,Iy则是一阶梯度,k是响应系数;我们是可以通过索贝尔算子,拉普拉斯算子等计算以上的梯度值。 矩阵M = 所以, R = + 其中, , 是矩阵M的特征检测值,用来计算角度响应值R, 根据我们自己设定的一个阈值t,若R>t,我们就认为在W这个窗口大小的像素中,包含了角点 关于 , 在图片的不同区域,得到的值是不同的。 角点处:两个特征值都很大,而且各个方向像素梯度变化明显! 平滑区:两个特征值较小,像素梯度基本不变 边缘地带:两个特征值,一个 远大于另外一个。 2.API介绍 void cornerHarris(InputArray src, OutputArrays dst , int blocksize, int ksize , double k, int borderType=BORDER_DEFAULT) 参数详解: 1.src是输入图像,一般要求是灰度图

深度学习之BN(批量标准化)

纵然是瞬间 提交于 2020-01-13 12:18:51
BN作为最近一年来深度学习的重要成果,已经广泛被证明其有效性和重要性。虽然还解释不清其理论原因,但是实践证明好用才是真的好。 一、什么是BN 机器学习领域有个很重要的假设: 独立同分布假设 ,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BN就是深度神经网络训练过程中使得每层网络的输入保持相同分布。 二、为什么要使用BN 根据论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》所讲内容,BN主要是解决Internal Convariate Shift问题。那么什么是Internal Convariate Shift呢? 可以这样解释:如果ML系统实例集合<X,Y>中的输入值X的分布老是变,这不符合IID假设,网络模型很难学习到有效的规律。对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate

Kaggle教程 机器学习中级6 XGBoost

房东的猫 提交于 2020-01-13 08:07:55
在本课程中,你将学习如何使用 梯度增强 方法来构建和优化模型。这个方法在Kaggle竞赛中占据优势地位,并且在不同的数据集中取到得很好的结果。 1、介绍 在本课程的大部分时间里,你已经使用随机森林方法进行了预测,该方法比单个决策树有更好的性能。 我们把随机森林方法称为“集成方法”。根据定义, 集成方法 结合了几个模型(例如,在随机森林的案例中有好几个树)的预测。 接下来,我们将学习另一种集成方法,称为 梯度增强 。 2、梯度增强 梯度增强是一种通过循环迭代将模型添加到集合中的方法。 它首先用一个模型初始化集合,这个模型的预测可能非常简单。(即使它的预测非常不准确,后续添加的集合将解决这些错误。) 然后,我们开始循环迭代: 首先,我们使用当前集成来为数据集中的每个观测结果生成预测。为了进行预测,我们将所有模型的预测添加到集成中。 这些预测被用来计算损失函数(例如, 平均平方误差 )。 然后,我们使用损失函数来适应一个新的模型,这个模型将被添加到集成中。具体地说,我们确定模型参数,以便将这个新模型添加到集成中来减少损失。(注:“梯度推进”中的“梯度”指的是我们将对损失函数使用梯度下降法来确定新模型中的参数。) 最后,我们将新的模型加入到集成中,并且重复… 3、案例 我们首先加载训练和验证数据 X_train 、 X_valid 、 y_train 和 y_valid 。 import

使用python实现canny算法

╄→гoц情女王★ 提交于 2020-01-13 07:08:45
1. Canny算法概述 Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory of edge detection)解释这项技术如何工作。 通常情况下边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。 2.最优边缘准则 Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: (1)最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小; (2)最优定位准则:检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小; (3)检测点与边缘点一一对应:算子检测的边缘点与实际边缘点应该是一一对应。 为了满足这些要求 Canny 使用了变分法(calculus of variations),这是一种寻找优化特定功能的函数的方法。最优检测使用四个指数函数项表示,但是它非常近似于高斯函数的一阶导数。 2. Canny算法实现步骤 第一步:灰度化 第二步:高斯滤波 任何边缘检测算法都不可能在未经处理的原始数据上很好地工作

OpenCV python 图像梯度--sobel图像处理

你说的曾经没有我的故事 提交于 2020-01-13 04:37:53
OpenCV python 图像梯度–sobel图像处理 处理原图:[source.jpg] import cv2 def main ( ) : # 1.导入图片 img_src = cv2 . imread ( "source.jpg" ) # 2.执行sobel算法1 img_sobel_64x = cv2 . Sobel ( img_src , cv2 . CV_64F , 0 , 1 ) img_sobel_64y = cv2 . Sobel ( img_src , cv2 . CV_64F , 1 , 0 ) img_sobel_x = cv2 . convertScaleAbs ( img_sobel_64x ) img_sobel_y = cv2 . convertScaleAbs ( img_sobel_64y ) img_sobel = cv2 . addWeighted ( img_sobel_x , 0.5 , img_sobel_y , 0.5 , 0 ) # 2.执行sobel算法2 img_sobelxy_11 = cv2 . Sobel ( img_src , cv2 . CV_64F , 1 , 1 ) img_sobelxy_11 = cv2 . convertScaleAbs ( img_sobelxy_11 ) # 3.显示图片 cv2 .