Coordinate Descent 및 Gradient Descent 두 알고리즘의 다양한 사용 사례가 무엇인지 궁금합니다 .
좌표 하강은 평활하지 않은 함수에 문제가 있지만 SVM 및 LASSO와 같은 널리 사용되는 알고리즘에 사용됩니다.
그러나 그라디언트 디센트는 특히 ANN의 부활과 다른 많은 기계 학습 작업에 더 널리 사용되는 것으로 생각됩니다.
내 질문은 : 어떤 유형의 문제가 하나에 맞지 만 다른 것에 맞지 않는지, 그리고 그 점에서 SVM 및 LASSO에 대한 좌표 하강 피팅, ANN에 대한 경사 하강 피팅을 만드는 것은 무엇입니까?
최적화 알고리즘을 선택할 때 두 가지 중에서 어떻게 선택해야합니까?
답변
나는 보통 함수의 매끄러운 부분 및 / 또는 페널티의 근위 연산자의 기울기를 해결하는 것이 얼마나 간단하고 쉬운 지의 문제라고 생각합니다.
때로는 모든 변수에 대해 동시에 해결하는 것보다 하나의 단일 변수 (또는 블록 또는 변수)가있는 경우 문제의 정확한 해결책을 찾는 것이 훨씬 간단합니다. 다른 경우에는 개별 미분에 비해 기울기를 계산하기에는 너무 비쌉니다. 또한 좌표 하강의 수렴은 ista, 와 동일합니다. 는 반복 횟수이지만 때때로 ISTA 및 FISTA에 비해 성능이 더 우수 할 수 있습니다 ( 예 : http : //statweb.stanford 참조) . .edu / ~ tibs / comparison.txt .
이러한 것들은 예를 들어 좌표 하강 대 ISTA / FISTA의 선택에 영향을 줄 것이다.
답변
좌표 하강은 한 번에 하나의 매개 변수를 업데이트 하는 반면, 경사 하강은 모든 매개 변수를 한 번에 업데이트하려고 시도합니다.
한 알고리즘이 다른 알고리즘보다 더 나은시기를 정확하게 지정하는 것은 어렵습니다 . 예를 들어, 좌표 하강이 LASSO의 최첨단이라는 사실을 알게되어 매우 충격을 받았습니다. 그리고 나는 유일한 사람이 아니었다. 슬라이드 17 참조 .
그렇기 때문에 하강을 조정하기 위해 문제를 더 수정할 수있는 몇 가지 기능이 있습니다.
(1) 빠른 조건부 업데이트. 어떤 이유로 문제가 매개 변수를 매우 빠르게 개별적으로 최적화 할 수있는 경우 좌표 하강에서이를 사용할 수 있습니다. 예를 들어, 데이터의 서브 세트만을 사용하여 특정 파라미터를 업데이트 할 수있어, 이들 업데이트의 계산 비용을 크게 감소시킬 수있다. 다른 경우는 다른 모든 매개 변수의 값에 따라 개별 매개 변수에 대해 닫힌 양식 솔루션이있는 경우입니다.
(2) 파라미터에 대해 상대적으로 독립적 인 모드. 한 매개 변수의 최적 값이 다른 매개 변수 값과 완전히 독립적 인 경우, 한 좌표의 하강 라운드가 솔루션으로 이어집니다 (각 좌표 업데이트가 현재 모드를 찾는 것으로 가정). 반면에, 주어진 매개 변수의 모드가 다른 매개 변수 값에 크게 의존하는 경우, 좌표 하강은 각 라운드마다 매우 작은 업데이트로 함께 인치 될 가능성이 매우 높습니다.
불행히도, 대부분의 문제에서 (2)는 유지하지 않으므로 좌표 강하가 다른 알고리즘과 비교되는 경우는 거의 없습니다. 나는 그것이 LASSO에 대해 잘 수행되는 이유는 조건을 제정하는 데 사용할 수있는 많은 트릭이 있기 때문이라고 생각합니다 (1).
그래디언트 디센트의 경우,이 알고리즘은 2 차 도함수가 상대적으로 안정적이고 양호한 가 선택 되고 Hessian의 대각 대각선이 대각선 항목에 비해 상대적으로 작 으면 잘 작동합니다. 이러한 조건도 드물기 때문에 일반적으로 L-BFGS와 같은 알고리즘보다 성능이 떨어집니다.
답변
나는 이것이 오래된 질문이며 매우 좋은 답변을 가지고 있음을 알고 있습니다. 실질적인 개인적인 경험을 나누고 싶습니다.
생성 기계 학습 기술로 작업 할 때는 일반적으로 일종의 확률로 작업합니다. 혼합 모델에서 성분 의 혼합 확률이 예가 될 수 있습니다 . 다음과 같은 제약 조건이 있습니다.
- 모든 확률은 양수 여야합니다.
- 확률 집합의 모든 요소는 1을 합산해야합니다.
이것은 실제로 많은 것을 요구하고 있습니다. 경사 하강에서는 일반적으로 페널티 함수를 통한 구속 조건을 처리합니다. 여기에서는 작동하지 않습니다. 값이 이러한 제약 조건 중 하나를 위반하면 코드에서 일반적으로 수치 오류가 발생합니다. 따라서 최적화 알고리즘이 실제로이를 통과하지 못하도록하여 제약 조건을 처리해야합니다.
경사 하강을 허용하기 위해 제약 조건을 만족시키기 위해 문제에 적용 할 수있는 수많은 변환이 있습니다. 그러나 이것을 구현하는 가장 쉽고 가장 게으른 방법을 찾고 있다면 좌표 강하가 갈 길입니다.
각 확률 :
- 모든 p_i를 업데이트하십시오.
파이썬에서 일하는 나와 같은 누군가에게 이것은 일반적으로 성능에 부정적인 영향을 미치는 추가 for 루프를 사용해야 함을 의미합니다. 그라데이션 하강으로 성능 최적화 된 Numpy를 사용할 수 있습니다. 그것으로 매우 좋은 속도를 얻을 수는 있지만, 이것은 좌표 하강으로 달성 할 수 없으므로 일반적으로 일부 변형 기술을 사용합니다.
결론적으로 좌표 하강은 포아송 분포의 속도 매개 변수와 같은 매우 엄격한 제약 조건을 처리하는 가장 쉬운 옵션이라는 것입니다. 음수가되면 코드 등을 불평합니다.
이것이 약간의 통찰력을 추가하기를 바랍니다.