답변:
편집 : 동료가 아래의 방법이 엔트로피 기능에 특화된 다음 논문의 일반적인 방법의 예라고 알려줍니다.
Overton, Michael L. 및 Robert S. Womersley. "대칭 행렬의 고유 값을 최적화하기위한 2 차 미분." 매트릭스 분석 및 응용에 관한 SIAM Journal 16.3 (1995) : 697-718. http://ftp.cs.nyu.edu/cs/faculty/overton/papers/pdffiles/eighess.pdf
개요
이 게시물에서 나는 최적화 문제가 잘 제기되고 불평등 제약이 솔루션에서 비활성이라는 것을 보여준 다음 엔트로피 함수의 첫 번째와 두 번째 Frechet 파생 상품을 계산 한 다음 등식 제약이 제거 된 문제에 대한 뉴턴의 방법을 제안합니다. 마지막으로 Matlab 코드 및 수치 결과가 제공됩니다.
최적화 문제의 자세
첫째, 양의 정한 행렬의 합은 양의 정한입니다. 따라서 의 경우 순위 1 행렬의 합 는 양의 한정입니다. 세트 가 전체 순위이면 고유 값 이 양수이므로 고유 값의 로그를 가져올 수 있습니다. 따라서 목적 함수는 실행 가능한 세트의 내부에 잘 정의되어 있습니다.A ( c ) : = N ∑ i = 1 c i v i v T i v i A
둘째, 으로 는 순위를 잃으므로 가장 작은 고유 값은 0이됩니다. 즉, 은 입니다. 의 미분은 지기 때문에 실행 가능한 세트의 경계에 접근하는 연속적으로 더 좋고 더 나은 점을 가질 수 없습니다. 따라서 문제가 잘 정의되어 있으며 불평등 제약 조건 도 비활성화되어 있습니다.A A σ m i n ( A ( c ) ) → 0 c i → 0 − σ log ( σ ) σ → 0 c i ≥ 0
엔트로피 함수의 Frechet 파생 상품
실행 가능한 영역의 내부에서 엔트로피 기능은 모든 곳에서 분화 가능한 Frechet이며 고유 값이 반복되지 않는 곳에서는 두 번 분화 할 수 있습니다. 뉴턴의 방법을 수행하려면 행렬의 고유 값에 따라 행렬 엔트로피의 미분 값을 계산해야합니다. 이를 위해서는 행렬의 변화와 관련하여 행렬의 고유 값 분해에 대한 감도를 계산해야합니다.
고유 값 분해가 인 행렬 경우 원래 행렬의 변화에 대한 고유 값 행렬의 미분은 이며 고유 벡터 행렬의 미분 은 여기서 는 Hadamard 곱 입니다. 계수 행렬
이러한 공식은 고유 값 방정식 를 차별화하여 파생되며 공식은 고유 값이 고유 할 때마다 유지됩니다. 고유 값이 반복 될 때 의 수식 은 고유하지 않은 고유 벡터가 신중하게 선택되는 한 확장 가능한 분리 불연속성을 갖습니다. 이에 대한 자세한 내용은 다음 프레젠테이션 및 용지를 참조하십시오 .
그런 다음
고유 값 행렬의 첫 번째 미분 값이 반복 고유 값에서 연속적으로 만들어 질 수 있지만, 는 에 의존하므로 의존 하므로 고유 값이 서로를 향해 변성됨에 따라 폭발하기 때문에 두 번째 미분 값은 불가능 합니다. 그러나 진정한 솔루션이 고유 값을 반복하지 않는 한 괜찮습니다. 수치 실험은 이것이 일반적인 의 경우라고 제안 하지만, 현재로서는 증거가 없습니다. 엔트로피를 최대화하면 일반적으로 가능한 경우 고유 값을 더 가깝게 만들려고하기 때문에 이해하는 것이 중요합니다.
평등 제약 제거
첫 번째 계수 에 대해서만 작업 하고 마지막 계수를 설정 하여 제약 조건 을 제거 할 수 있습니다.
전반적으로, 약 4 페이지의 행렬 계산 후, 제 1 계수 의 변화에 대한 목적 함수의 감소 된 제 1 및 제 2 도함수는 다음과 같이 주어진다. 여기서
제약 조건을 제거한 후 뉴턴의 방법
불평등 제약 조건이 비활성 상태이므로 실행 가능한 세트에서 시작하여 내부 최대 값에 대한 2 차 수렴을 위해 트러스트 영역 또는 라인 검색 부정확 한 뉴턴 CG를 실행합니다.
방법은 다음과 같습니다 (신뢰 영역 / 행 검색 세부 사항은 포함하지 않음)
결과
랜덤 경우 steplength에 대한 linesearch를 사용하면 메소드가 매우 빠르게 수렴됩니다. 예를 들어, (100 ) 인 다음 결과 가 일반적입니다.이 방법은 2 차적으로 수렴됩니다. N = 100 v i
>> N = 100; >> V = 랜드 (N, N); >>에 대한 k = 1 : NV (:, k) = V (:, k) / norm (V (:, k)); 종료 >> maxEntropyMatrix (V); 뉴턴 반복 = 1, 규범 (grad f) = 0.67748 뉴턴 반복 = 2, 규범 (grad f) = 0.03644 뉴턴 반복 = 3, 규범 (grad f) = 0.0012167 뉴턴 반복 = 4, 규범 (grad f) = 1.3239e-06 뉴턴 반복 = 5, 규범 (grad f) = 7.7114e-13
계산 된 최적 지점이 실제로 최대 값임을 확인하기 위해 최적 지점이 임의로 교란 될 때 엔트로피가 어떻게 변하는 지에 대한 그래프가 있습니다. 모든 섭동은 엔트로피를 감소시킵니다.
MATLAB 코드
엔트로피를 최소화하는 1 개의 기능 (이 게시물에 새로 추가) : https://github.com/NickAlger/various_scripts/blob/master/maxEntropyMatrix.m