标签: gradient-descent

具有约束的梯度下降(拉格朗日乘数)

我试图使用梯度下降在N个参数中找到函数的最小值.但是我想这样做,同时将参数的绝对值之和限制为1(或<= 1,无关紧要).由于这个原因,我使用了拉格朗日乘数的方法,所以如果我的函数是f(x),我将最小化f(x)+ lambda*(g(x)-1)其中g(x)是平滑近似值参数绝对值的总和.

根据我的理解,当g(x)= 1时,此函数的梯度将仅为0,因此找到局部最小值的方法应该找到我的条件也满足的最小函数.问题是这个加法我的函数是无界的,因此Gradient Descent只是找到越来越大的lambdas,它们具有越来越大的参数(绝对值)并且永远不会收敛.

目前我正在使用CG的python(scipy)实现,所以我真的更喜欢不要求我自己重新编写/调整CG代码但使用现有方法的建议.

machine-learning gradient-descent

11
推荐指数
3
解决办法
1万
查看次数

如何确定梯度下降算法的学习率和方差?

我上周开始学习机器学习.当我想制作一个梯度下降脚本来估计模型参数时,我遇到了一个问题:如何选择合适的学习率和方差.我发现,不同的(学习率,方差)对可能会导致不同的结果,有些你甚至无法收敛.此外,如果更改为另一个训练数据集,选择良好(学习率,方差)对可能不起作用.例如(下面的脚本),当我将学习率设置为0.001并且方差为0.00001时,对于'data1',我可以得到合适的theta0_guess和theta1_guess.但是对于'data2',它们无法使算法收敛,即使我尝试了几十个(学习率,方差)对仍然无法达到收敛.

所以,如果有人能告诉我,有一些标准或方法来确定(学习率,方差)对.

import sys

data1 = [(0.000000,95.364693) ,
    (1.000000,97.217205) ,
    (2.000000,75.195834),
    (3.000000,60.105519) ,
    (4.000000,49.342380),
    (5.000000,37.400286),
    (6.000000,51.057128),
    (7.000000,25.500619),
    (8.000000,5.259608),
    (9.000000,0.639151),
    (10.000000,-9.409936),
    (11.000000, -4.383926),
    (12.000000,-22.858197),
    (13.000000,-37.758333),
    (14.000000,-45.606221)]

data2 = [(2104.,400.),
     (1600.,330.),
     (2400.,369.),
     (1416.,232.),
     (3000.,540.)]

def create_hypothesis(theta1, theta0):
    return lambda x: theta1*x + theta0

def linear_regression(data, learning_rate=0.001, variance=0.00001):


    theta0_guess = 1.
    theta1_guess = 1.


    theta0_last = 100.
    theta1_last = 100.

    m = len(data)

    while (abs(theta1_guess-theta1_last) > variance or abs(theta0_guess - theta0_last) > variance):

        theta1_last = theta1_guess
        theta0_last = theta0_guess

        hypothesis = create_hypothesis(theta1_guess, theta0_guess) …
Run Code Online (Sandbox Code Playgroud)

python machine-learning gradient-descent

11
推荐指数
1
解决办法
9641
查看次数

11
推荐指数
1
解决办法
9939
查看次数

如何在tensorflow中积累渐变?

我有一个与此类似的问题.

因为我的资源有限而且我使用深度模型(VGG-16) - 用于训练三重网络 - 我想为128个大小的一个训练示例累积渐变,然后传播错误并更新权重.

我不清楚我该怎么做.我使用tensorflow但欢迎任何实现/伪代码.

gradient-descent conv-neural-network tensorflow

11
推荐指数
2
解决办法
4132
查看次数

什么是Gradient Descent的替代品?

Gradient Descent存在局部最小值的问题.我们需要运行梯度下降指数时间来找到全局最小值.

任何人都能告诉我梯度下降的任何替代方案的优缺点.

谢谢.

machine-learning neural-network gradient-descent logistic-regression

10
推荐指数
2
解决办法
3976
查看次数

Java中的梯度下降

我最近在Coursera开始了AI-Class,我有一个与我实现梯度下降算法有关的问题.

这是我当前的实现(我实际上只是将数学表达式"翻译"为Java代码):

public class GradientDescent {

private static final double TOLERANCE = 1E-11;

private double theta0;
private double theta1;

public double getTheta0() {
    return theta0;
}

public double getTheta1() {
    return theta1;
}

public GradientDescent(double theta0, double theta1) {
     this.theta0 = theta0;
     this.theta1 = theta1;
}

public double getHypothesisResult(double x){
    return theta0 + theta1*x;
}

private double getResult(double[][] trainingData, boolean enableFactor){
    double result = 0;
    for (int i = 0; i < trainingData.length; i++) {
        result = (getHypothesisResult(trainingData[i][0]) - trainingData[i][1]); …
Run Code Online (Sandbox Code Playgroud)

java artificial-intelligence gradient-descent

10
推荐指数
1
解决办法
6654
查看次数

Tensorflow:如何在python中使用渐变来编写op?

我想在python中编写TensorFlow操作,但我希望它是可微分的(能够计算渐变).

这个问题询问如何在python中编写一个op,答案建议使用py_func(没有渐变):Tensorflow:用Python编写一个Op

TF文档描述了如何仅从C++代码添加操作:https://www.tensorflow.org/versions/r0.10/how_tos/adding_an_op/index.html

在我的情况下,我正在进行原型设计,所以我不关心它是否在GPU上运行,我不关心它是否可以从TF python API以外的任何东西使用.

python neural-network gradient-descent tensorflow

10
推荐指数
1
解决办法
5089
查看次数

Scipy稀疏CSR矩阵到TensorFlow SparseTensor - Mini-Batch梯度下降

我有一个Scipy稀疏CSR矩阵,它是用SVM-Light格式的稀疏TF-IDF特征矩阵创建的.功能的数量是巨大的,它是稀疏的所以我必须使用SparseTensor,否则它太慢.

例如,要素数量为5,示例文件可能如下所示:

0 4:1
1 1:3 3:4
0 5:1
0 2:1
Run Code Online (Sandbox Code Playgroud)

解析后,训练集如下所示:

trainX = <scipy CSR matrix>
trainY = np.array( [0,1,00] )
Run Code Online (Sandbox Code Playgroud)

我有两个重要问题:

1)我如何有效地将其转换为SparseTensor(sp_ids,sp_weights),以便我使用查找执行快速乘法(WX):https://www.tensorflow.org/versions/master/api_docs/python/nn.html# embedding_lookup_sparse

2)如何在每个时期随机化数据集并重新计算sp_ids,sp_weights以便我可以为小批量梯度下降提供(feed_dict).

像logistic回归这样的简单模型的示例代码将非常受欢迎.图表将是这样的:

# GRAPH
mul = tf.nn.embedding_lookup_sparse(W, X_sp_ids, X_sp_weights, combiner = "sum")  # W.X
z = tf.add(mul, b) #  W.X + b


cost_op = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(z, y_true))  # this already has built in sigmoid apply
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost_op)  # construct optimizer

predict_op = tf.nn.sigmoid(z) # sig(W.X + b)
Run Code Online (Sandbox Code Playgroud)

scipy sparse-matrix gradient-descent tensorflow

10
推荐指数
1
解决办法
6436
查看次数

R:实现我自己的梯度提升算法

我正在尝试编写自己的梯度提升算法。我知道有像这样的现有包gbmxgboost,但我想通过编写自己的包来了解算法的工作原理。

我正在使用iris数据集,我的结果是Sepal.Length(连续)。我的损失函数是mean(1/2*(y-yhat)^2)(基本上是前面有 1/2 的均方误差),所以我对应的梯度就是残差y - yhat。我将预测初始化为 0。

library(rpart)
data(iris)

#Define gradient
grad.fun <- function(y, yhat) {return(y - yhat)}

mod <- list()

grad_boost <- function(data, learning.rate, M, grad.fun) {
  # Initialize fit to be 0
  fit <- rep(0, nrow(data))
  grad <- grad.fun(y = data$Sepal.Length, yhat = fit)

  # Initialize model
  mod[[1]] <- fit

  # Loop over a total of M iterations
  for(i in 1:M){

    # Fit base learner (tree) …
Run Code Online (Sandbox Code Playgroud)

r machine-learning gradient-descent gbm boosting

10
推荐指数
1
解决办法
369
查看次数

Keras中的自定义丢失功能可以惩罚漏报

我正在研究一个医疗数据集,我试图减少假阴性.预测"实际上没有疾病时的疾病"对我来说是可以的,但预测"实际上没有疾病时没有疾病".也就是说,我没事,FP但没有FN.

之后做一些研究,我发现喜欢的方式Keeping higher learning rate for one class,using class weights,ensemble learning with specificity/sensitivity等.

我使用类权重来实现接近期望的结果class_weight = {0 : 0.3,1: 0.7},然后调用model.fit(class_weights=class_weight).这给了我非常低的FN但是相当高的FP.我试图尽可能地降低FP,使FN保持在非常低的水平.

我正在努力编写一个自定义丢失函数,Keras这将帮助我惩罚假阴性.谢谢您的帮助.

machine-learning gradient-descent deep-learning keras loss-function

9
推荐指数
1
解决办法
1081
查看次数