행렬에 새 행을 하나 추가 한 후 SVD 분해 업데이트


17

SVD 분해 A = U S V with 인 m × n 크기 의 밀도가 높은 행렬 가 있다고 가정합니다 . 에서 나는 SVD를 계산할 수 있습니다 다음과 같습니다 .Am×n

A=USV⊤.
Rsvd(A)

새로운 번째 행이 A에 추가되면 SVD를 처음부터 다시 계산하지 않고 이전 행을 기반으로 새 SVD 분해를 계산할 수 있습니까 (예 : U , S 및 V 사용 )?(m+1)AUSV


3
의 문헌을 확인하십시오 rank 1 updates. Brand의 경량 추천 시스템 에 대한 빠른 온라인 SVD 개정판 은 액세스 가능한 첫 번째 논문입니다. 불행히도 R에서 이미 구현 된 SVD에 대해서는 보지 못했습니다. CHOLMOD 덕분에 Cholesky 업데이트가 ( updown부터 Matrix) 존재합니다 . 행렬 의 희소성 은 실제로 최종 솔루션과는 다릅니다. 밀도가 높거나 희소 행렬을 가정합니까? A
— usεr11852는

2
+1 ~ @ usεr11852. 또한 QR을 업데이트하는 것이 훨씬 쉽고 표준 적이며 일부 응용 프로그램에서는 QR이 충분하며 실제로 SVD가 필요하지 않습니다. 따라서 응용 프로그램에 대해서도 생각하십시오.
— amoeba는

예, 매트릭스는 밀도가 높습니다.
— user1436187

1
추천 문헌을 '디치'하고 이미지 처리에 중점을 둡니다. 둘러보기와 비슷한 질문이 데이터베이스에 "새 이미지"라는 용어로 게시되었습니다. 예를 들어 제 직감에는 누군가 자신의 고유 페이스 항목을 온라인으로 업데이트하는 알고리즘이 있어야한다는 것입니다. 이 사람들은 밀도가 높은 행렬 표현으로 작업합니다.
— usεr11852는

답변:


14

예, 기존 행렬에 새 행을 하나 추가 한 후 SVD 분해를 업데이트 할 수 있습니다.

일반적으로이 " 1 대 1 추가 "문제 공식은 순위 1 업데이트 라고 합니다 . @amoeba가 제공 한 " 고유 값 분해의 효율적인 순위 2 업데이트 "에 관한 MathOverflow 링크 는이 문제에 대해 더 깊이 조사하기를 원하는 첫 번째 단계입니다. 첫 번째 논문은 특정 질문에 대한 명확한 해결책을 제공합니다. 새로운 가A∗

A∗=A−uvT

uv

A∗=A−UVT

우드 베리 공식은 놀이로 제공됩니다. 이 공식을 보면 많은 역수가 포함되어 있음을 알 수 있습니다. 직접 해결하지 마십시오. 이미 많은 하위 시스템을 이미 해결 했으므로 (즉, 일부 분해가 이미 계산 된 경우)이를 사용하여 더 빠르고 안정적인 추정값을 얻을 수 있습니다. (이것이 사람들이 여전히이 분야를 연구하는 이유입니다.) 저는 JE Gentle의 " 전산 통계 " 책을 참조로 많이 사용했습니다. 나는 Chapt을 생각한다. 5 수치 선형 대수 가 올바르게 설정됩니다. (Uber-classic : Harville 의 " 통계학 자의 관점에서 얻은 매트릭스 대수 "는 불행히도 순위 업데이트를 전혀 다루지 않습니다.)

통계 / 애플리케이션 측면을 살펴보면, 추천 시스템에서 하나의 업데이트 순위가 일반적입니다. 하나는 새로운 사용자가 등록하거나 새로운 제품이 등록 될 때마다 수천 개의 고객 항목이 있고 SVD (또는 해당 문제에 대한 주어진 분해)를 다시 계산할 수 있기 때문입니다. 추가 또는 제거는 매우 낭비 적입니다 (달성 할 수없는 경우). 일반적으로 추천 시스템 매트릭스는 희소하므로 알고리즘이 훨씬 더 효율적입니다. 접근 가능한 첫 번째 논문은 M. Brand의 " 경량 추천 시스템을위한 빠른 온라인 SVD 개정 "원고입니다. 밀도가 높은 매트릭스로 가기 패턴 인식 및 이미징 프로세싱의 논문을 보면 실제 알고리즘을 사용하는 데 상당한 도움이 될 수 있다고 생각합니다. 예를 들어 논문 :

  1. Ren과 Dai의 얼굴 인식 (2009) 을 위한 양방향 주요 구성 요소에 대한 증분 학습
  2. Li et al.의 점진적이고 강력한 부분 공간 학습 (2003)
  3. 순차 Karhunen-Loeve 기반 추출 및 Levey와 Lindenbaum의 이미지 (2000) 적용 .
  4. Ross et al.의 강력한 시각적 추적을위한 증분 학습 (2007) .

모두 핵심에서 같은 문제를 다루는 것 같습니다. 새로운 기능이 등장하고 있으며 그에 따라 표현을 빠르게 업데이트해야합니다 . 이 행렬은 대칭이거나 정사각형이 아닙니다. M. Brand의 또 다른 연구에서도이 문제를 해결할 수 있습니다 ( " 단수 단일 값 분해 (2006)의 빠른 하위 순위 수정 " ( 이 문서의 시작 부분에 제공된 MO 링크에도 언급) 참조). 주제에 대한 좋은 논문을 많이하지만 대부분은 (주로 수학 경향 예. "에 Benaych - Georgesa 및 Nadakuditi 종이 단수 값과 큰 직사각형 랜덤 행렬의 낮은 순위 교란의 벡터 (2012)")에 대한 답변이 곧 해결 될 것으로 생각하지 않습니다. 이미지 처리 관련 자료에 계속 집중하시기 바랍니다.

불행히도 순위 1 업데이트 루틴에 대한 R 구현을 보지 못했습니다. Computational Science SE의 " Python, C 또는 Fortran에서 업데이트 가능한 SVD 구현? " 에 대한 답변은 고려해야 할 여러 MATLAB 및 C ++ 구현을 제공합니다. 일반적으로 R, Python 등의 구현은 C, C ++ 또는 FORTRAN 구현에 대한 래퍼입니다.


6
이것은 좋은 논평이지만 질문에 대한 답을 찾지 못한 것에 실망했습니다. 그것은 밝혀 마태 복음 상표에 의하여 다른 종이 미주리 대답에 링크가, 명시 적 솔루션이 포함되어 있습니다.
— whuber

5
귀하와 @whuber 모두에게 +1 (다른 SE 사이트에 제공된 정보를 "중복"하는 것은 피해야한다고 생각하지 않습니다! 이 사이트에 제공된 정보 를 자급 자족 해야한다고 주장합니다. 실제로 여기에 포함 된 거의 모든 정보는 기존의 교과서, 온라인 자료 또는 연구 논문을 복제하는 의미로 사용됩니다. 한 가지 질문 : 랭크 1 또는 상위 랭크 업데이트 후 역행렬이 어떻게 변하는 지 설명하는 셔먼-모리슨 (Sherman-Morrison) 및 우드버리 (Woodbury) 공식을 언급했습니다. SVD와 어떤 관계가 있습니까?
— amoeba는

1
사람들을 해당 링크의 MO 페이지로 안내하려는 이유를 이해하지만 문제를 해결한다고 직접 언급 할 수도 있습니다. ( "좋은 첫 걸음"은 큰 과소 평가입니다.) 많은 논평은 아직 좋은 해결책을 찾지 못했다고 오해 될 수 있습니다.
— whuber

1
@ whuber : "Good"이 "great"가되었고 이제 논문도 더 잘 언급 했습니까? :) (그런데 피드백 감사합니다.)
— usεr11852 Reinstate Monic

2
역사를 위해서, Bunch와 Nielsen 은 SVD를 업데이트하고 다운 타임을하는 방법을 최초로 보여주었습니다. 사실상 브랜드의 방법은이 오래된 논문의 방법을 일반화합니다.
— JM은 통계학자가 아닙니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.