2016-08-01 7 views
2

Spark 1.6 ML 라이브러리에서 병렬 LBFGS 및 OWLQN 알고리즘 구현에 대한 설명서를 찾고 있습니다. 최적화 LBFGS OWLQN 구현

나는 1.6이 페이지를 발견 : http://spark.apache.org/docs/1.6.1/ml-advanced.html하지만 아무것도 2.0에 대한 병렬화

에 대해 : 병렬

에 대한 http://spark.apache.org/docs/2.0.0/ml-advanced.html하지만 여전히 아무것도 마지막으로, 나는 코드 [링크 1]를 참조하십시오. 방법

def train(dataset: DataFrame): LogisticRegressionModel 

는 브리즈 사용하여 모델을 최적화 보이지만 스파크 함수가 호출 어디 (지도, flatMap가 감소 ...) 찾을 수 없습니다.

[link2] 코드에서 map은 그라데이션을 계산하기 위해 축소 된 하위 그라디언트를 계산하는 데 사용됩니다.

감사

요컨대
+0

링크 1 : https://github.com/apache/spark/blob/v1.6.0/mllib/src/main/scala/org/apache/spark/ml/classification/LogisticRegression.scala – DLSpark

+0

링크 2 : HTTPS ://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/SparkLR.scala – DLSpark

답변

2

스파크는 브리즈 LBFGS 및 OWLQN 최적화 알고리즘을 사용하며, 각각의 반복에서 비용 함수의 기울기를 계산하는 방법과 그 각을 제공한다.

클래스의 경우 예를 들어 Spark의 LogisticRegression 클래스는 Breeze의 DiffFunction 특성을 확장하는 LogisticCostFun 클래스를 사용합니다.

override def calculate(coefficients: BDV[Double]): (Double, BDV[Double]) 

계산 방법은 실제 작업이 완료되는 경우입니다 LogisticAggregator 클래스를 사용합니다 :이 비용 함수 클래스는 서명이있는 calculate 추상 메소드를 구현합니다. 집계 클래스는 두 가지 중요한 방법 정의 :

def add(instance: Instance): this.type // the gradient update equation is hard-coded here 
def merge(other: LogisticAggregator): this.type // just adds other's gradient to the current gradient 

추가 방법은 하나의 데이터 포인트를 추가 한 후 그라디언트를 업데이트하는 방법을 정의, 그리고 병합 방법은 두 개의 분리 된 어 그리 게이터를 결합하는 방법을 정의합니다. 이 클래스는 집행자에게 발송되어 각 데이터 파티션을 집계 한 다음 모든 파티션 애그리 게이터를 하나의 애그리 게이터로 결합하는 데 사용됩니다. 최종 애그리 게이터 인스턴스는 현재 반복에 대한 누적 그라데이션을 보유하고 드라이버 노드의 계수를 업데이트하는 데 사용됩니다. 브리즈는 여러 가지 최적화 방법 (예를 들어 LBFGS, OWLQN)를 구현 만에 당신이 필요합니다

val logisticAggregator = { 
    val seqOp = (c: LogisticAggregator, instance: Instance) => c.add(instance) 
    val combOp = (c1: LogisticAggregator, c2: LogisticAggregator) => c1.merge(c2) 

    instances.treeAggregate(
    new LogisticAggregator(coeffs, numClasses, fitIntercept, featuresStd, featuresMean) 
)(seqOp, combOp) 
} 

당신은 다음과 같이 좀 더 간단하게 생각할 수 있습니다 :이 프로세스는 LogisticCostFun 클래스 treeAggregate 호출에 의해 제어됩니다 그라데이션을 계산하는 방법을 최적화 방법에 알리십시오. Spark는 Breeze 알고리즘에 LogisticCostFun 클래스를 통해 그래디언트를 계산하는 방법을 알려줍니다. LogisticCostFun은 각 파티션에 LogisticAggregator 인스턴스를 발송하고 그라디언트 업데이트를 수집 한 다음 다시 발송하여 드라이버에 결합하도록합니다.

+0

대단히 감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. – DLSpark