0-1 행렬 벡터 곱셈의 자동 최적화


22

의문:

행렬이 조밀하고 0과 1로만 채워질 때 행렬-벡터 곱셈을 효율적으로 적용하는 코드를 생성하는 절차 나 이론이 있습니까? 이상적으로, 최적화 된 코드는 이전에 계산 된 정보를 체계적으로 사용하여 중복 작업을 줄입니다.

즉, 나는 행렬이 M 나는에 따라 약간의 사전 계산하고 싶지 M 컴퓨팅 것, 나중에 벡터받을 때 가능한 한 효율적으로 .Mvv

M 은 "컴파일 타임"으로 알려진 직사각형의 고밀도 이진 행렬 인 반면, 는 "런타임"에서만 알려진 알 수없는 실수 벡터입니다.v

예 1 : (슬라이딩 창)

간단한 작은 예를 사용하여 요점을 설명하겠습니다. 매트릭스가 고려 이 행렬을 벡터 에 적용하여 합니다. 그런 다음 결과 항목은

M=[11111111111111111111].
vw=Mv
w1=v1+v2+v3+v4+v5w2=v2+v3+v4+v5+v6w3=v3+v4+v5+v6+v7w4=v4+v5+v6+v7+v8

표준 행렬-벡터 곱셈을 수행하면 정확하게 이런 식으로 계산됩니다. 그러나이 작업은 대부분 중복됩니다. 우리는 "실행 총계"를 추적하고 다음 숫자를 얻기 위해 더하기 / 빼기를 ​​통해 동일한 매트릭스 계산을 적은 비용으로 수행 할 수 있습니다 :

w1=v1+v2+v3+v4+v5w2=w1+v6v1w3=w2+v7v2w4=w3+v8v3

예 2 : (계층 구조)

이전 예제에서는 누적 합계를 추적 할 수 있습니다. 그러나 보통 중간 결과 트리를 작성하고 저장해야합니다. 예를 들어 중간 결과 트리를 사용하여 효율적으로 계산할 수 있습니다.w=M의V

M=[111111111111111111111111]
w=Mv
  1. 와 계산 하고 추가하여 을 얻 .7 3w5w7w3
  2. 와 계산 하고 추가하여 를 얻 .6 2w4w6w2
  3. 추가 및 얻을 수3 1w2w3w1

위 예제의 구조는보기 쉽지만 관심있는 실제 행렬의 경우 구조가 그렇게 간단하지 않습니다.

예 3 : (낮은 순위)

약간의 혼동을 없애기 위해, 행렬은 일반적으로 희소하지 않습니다. 특히,이 문제를 해결하는 방법은 큰 블록으로 채워진 매트릭스를 적용하는 효율적인 방법을 찾을 수 있어야합니다. 예를 들어

M=[111111111111111111111111].

이 행렬은 두 순위 1 행렬의 차이로 분해 될 수 있습니다.

M=[111111111111111111111111111111][111111]

그래서 벡터에 미치는 작용 , 효율적으로 계산할 수 w:=Mv

w1=v1+v2+v3+v4+v5+v6w2=w1w3=w2v5v6w4=w3w5=w4.

자극:

일부 이미지 처리를 위해 수치 방법을 연구 중이며 모든 구조가 다른 고밀도 행렬이 항상 고정되어 있습니다. 나중에이 행렬은 사용자의 입력에 의존하는 많은 알려지지 않은 벡터 적용되어야 합니다. 지금은 연필과 종이를 사용하여 행렬별로 효율적인 코드를 작성하고 있지만 프로세스를 자동화 할 수 있는지 궁금합니다.01vi

편집 : (postscript)

지금까지 (9/5/15 현재) 여기의 모든 답변은 흥미 롭지 만, 내가 바라는 것처럼 만족스럽게 질문에 대답하지는 않습니다. 아마도 이것은 어려운 연구 문제이며, 아무도 정답을 알지 못합니다.

시간이 촉박 한 이래로 저는 올바른 질문 을 다루기 때문에 EvilJS의 답변에 현상금을 수여하고 있습니다. 그러나 대답에 더 명확하고 자세한 설명이 포함되기를 바랍니다.

tranisstor의 답변 은이 질문과 OMv (Online Boolean Matrix-Vector Multiplication) 문제 사이를 연결하지만이 질문이 정확히 연결하는 것은 아닙니다. 특히 다음 가정은 실제로 적합하지 않습니다 (굵게 강조 표시).

이제 가정 그 모든 모든 행렬 n × n M nn0n×nMA n , M v M v O ( n 2 ε ) ε > 0 우리는 알고리즘을 알고 , 모든 벡터의 계산 시간에 진정 subquadratic 시간, 즉 일부의 .An,MvMvO(n2ε)ε>0

모든 행렬에 대해 이차 알고리즘이 존재하는지의 여부는 가능한 한 빠른 특정 행렬에 대한 알고리즘을 찾는 문제와 직교합니다. 대부분의 0-1 행렬은 랜덤 노이즈처럼 보이며 (추상한다면) 이차 알고리즘이 없을 것입니다. 그러나 실제로 나쁜 행렬이 있다는 사실은 좋은 행렬, 예를 들어 "슬라이딩 창"행렬에서 빠른 알고리즘을 찾지 못하게합니다.

vzn의 답변, 첫 번째 답변 , 두 번째 답변 은 흥미 롭습니다 (그리고 내 의견으로는 너무 많은 공여를받을 자격이 없습니다).


1
행렬이이 형식 인 경우 TDMA 는 대역 행렬 인 Thomas 알고리즘입니다. 아직 0-1은 아니지만이 기능을 이용해야합니다.
Evil

@EvilJS 매트릭스는 특정 예제에 대해 밴딩됩니다. 일반적으로 밴딩되지 않습니다. 밴딩되지 않은 다른 예제를 추가했습니다.
Nick Alger

이진, 실제 벡터 인 상수 행렬 N x M이 많으며 인스턴스 당 전처리 단계에서 최적의 실행 경로를 사전 계산하려고합니까? 이러한 연산의 출력은 매트릭스 당 하드 코딩 된 연산이있는 코드이며 방법을 원하십니까? 인스턴스 당 나는 매트릭스 당을 의미한다. 그냥 확인 중입니다.
Evil

이 질문은 하나의 알려진 진 매트릭스가 상황에 관한 @EvilJS 많은 알 수없는 실제 벡터에 적용됩니다, v에 난을 나중에. M 만을 기반으로 , 우리 는 가능한 한 효율적으로 M 을 적용 할 코드를 미리 계산하여 나중에 v i를 받을 때 가능한 빨리 M v i 를 계산할 수 있습니다. 이 질문에 대한 동기 부여 된 특정 애플리케이션에서 I는 벡터 반면 모든 시간이 고정된다 (실제로 12)와 같은 바이너리 매트릭스 소수가 v에 예측할 프로그램의 사용자의 입력에 의존한다.MviMMviMvivi
Nick Alger

1
두 요소의 분야에서 주어진 선형 변환을 시뮬레이션하는 최소 XOR 게이트 회로를 계산하는 문제는 NP-hard입니다. 참조 cstheory.stackexchange.com/a/32272/225
라이언 윌리엄스에게

답변:


5

가능하다면 줄무늬의 3 각형 특성을 이용하십시오.
그렇지 않으면 행렬에 일정한 수의 고유 값 (확실히 이진)이 포함되어 있으면 Mailman 알고리즘을 시도해야합니다 (Edo Liberty, Steven W. Zucker In Yale 대학 기술 보고서 ​​# 1402) : 유한 사전보다 최적화
Common Subexpression Elimination은 Multiple Constant Multiplication과 같이 어느 정도 알려져 있지만 게이트 수준으로 내려가는 것은 옵션입니다. 여기서 사용 된 패턴은 솔루션으로 별도로 사용하거나 다른 방법과 병합 할 수 있습니다. Ning Wu, Xiaoqiang Zhang, Yunfei Ye 및 Lidong Lan의 새로운 게이트 레벨 지연 계산 방법을 사용한 알고리즘 샌프란시스코, 미국 " 게이트 레벨 CSE

상수가있는 기호 행렬을 생성하고 변수가있는 벡터를 생성하고 컴파일러에서 정적 단일 Assingment (SSA)에 연결하여 수작업으로 행렬을 작성하는 프로세스를 자동화하는 조잡하지만 작동하는 방법이 있습니다.

새로운 알고리즘 프로토 타입
실행 합계로 수행 한 작업 : 10 개의연산을제공하며, Thomas를 사용하는 초기 아이디어는 동일합니다. 지금은 여전히 ​​새로운 알고리즘을 작성하고 테스트하고 있으며 런타임도불쾌하지만 첫 번째 테스트 결과는 놀라운 답변을 제공했습니다.

w1=v1+v2+v3+v4+v5w2=w1+v6v1w3=w2+v7v2w4=w3+v8v3


9 개의연산을제공하여 + 또는-로 1을 정의하고 =는 0입니다.

tmp1=v2+v3+v4+v5w1=v1+tmp1w2=tmp1+v6w3=w2+v7v2w4=w3+v8v3

w1=v1+v2+v3+v4+v5+v6w2=w1w3=w2v5v6w4=w3w5=w4.

이것은 7 가지 연산을 제공 하며, 알고리즘 결과는 다음과 같습니다
6작업을제공합니다. 지금은 해밍 거리를 사용하고 있음을 알 수 있습니다. 비트 연산, 사용량 계산 및 Cocky-Younger–Kasami (CYK)와 같은 무언가 만들기- "창조자 인 John Cocke, Daniel Younger 및 Tadao Kasami의 이름을 딴 문맥없는 문법에 대한 구문 분석 알고리즘입니다. 프로그램 작성." -Wikipedia의 변수 블록을 만드는 데 사용하는 것과 동일한 기술입니다.

tmp1=v1+v2+v3+v4tmp2=v5+v6w1=tmp1+tmp2w2=w1w3=w2tmp2w4=w3w5=w4.


(re rev5) plz는 "evergreen method"에 대해 언급합니다. 또한 SSA 란 무엇입니까? CYK 동적 알고리즘?
vzn

나는이 답변에 현상금을 수여했으며, 원래 질문을 편집하는 이유를 설명했습니다.
Nick Alger

8

이것은 "온라인 부울 매트릭스-벡터 곱셈 (OMv) 문제"로 알려진 개방형 리서치 질문과 관련이 있습니다. 이 문제는 다음과 같이 읽습니다 ([1] 참조). 이진 행렬 Mn 이진 열 벡터 v 1 , , v n이 주어지면, v i + 1 이 도달 하기 전에 M v i 를 계산해야 합니다.n×nMnv1,,vnMvivi+1

이 문제의 문제는 다소 일반적입니다. 행렬과 실수 벡터를 허용합니다. n x n 행렬과 부울 벡터 의 문제 는 특별한 경우를 나타 내기 때문에 "더 쉬워"라는 것을 관찰하십시오 .m×nn×n

분명히, 온라인 부울 행렬-벡터 곱셈 문제 (표준 행렬-벡터 곱셈 만 사용)에 대한 순진한 알고리즘에는 시간 가 걸립니다 . 이것이 O ( n 3 ) 보다 더 빠르게 수행 될 수 없다는 추측 (예 : [1] 참조)이 있습니다 . (더 자세하게,이 추측은 다음과 같습니다. 진정한 부 큐빅 알고리즘이 없으며, 온라인 부울 매트릭스-벡터 곱셈 문제를 해결합니다. 즉, ε > 0에 대해 실행 시간 O ( n 3 ε ) 을 갖는 알고리즘이 없습니다 ).O(n3)O(n3)O(n3ε)ε>0

이 시간에 윌리엄스의 알고리즘이 문제를 해결할 수있는 문제 것으로 알려져 . 자세한 내용은 [2]를 참조하십시오.O(n3/log2n)

위의 추측을 입증하거나 반증 할 수 있다면 조건부 하한 영역에서 돌파구가 될 것입니다.

[1] 온라인 매트릭스-벡터 곱셈 추측을 통한 동적 문제에 대한 경도 통합 및 강화. Henzinger, Krinninger, Nanongkai 및 Saranurak
[ http://eprints.cs.univie.ac.at/4351/1/OMv_conjecture.pdf ]

[2] 이차 시간에서의 행렬-벡터 곱셈 : (일부 전처리 필요). 윌리엄스
[ http://dl.acm.org/citation.cfm?id=1283383.1283490 ]

최신 정보

주석의 질문 중 하나는 다음과 같습니다. 컴파일 타임에 을 알고 있습니다. 알고리즘을 M 에 맞게 조정할 수 없어 OMv 문제 (추정)가 적용되지 않습니까? 우리는 OMv 추측이 실패하지 않는 한, 그렇지 않다는 것을 알게 될 것입니다.MM

증명 아이디어는 간단합니다. 모든 행렬에 대해 특정 크기까지 빠른 알고리즘을 제공 할 수 있다고 가정합니다 (예 : 가능한 모든 경우를 구별). 이 특정 크기 후에 우리는 나누기와 정복을 사용합니다.

여기에 세부 사항은 다음과 같습니다
일부 수정 (일반성의 손실없이) 2의 전력 및 2보다 큰 지금 모든 것을 가정하고, N n은 0 모든 N × N 행렬 M은 우리가 알고리즘을 알고 N , M , 모든 벡터가 v에 계산해에게 M의 V 시간에 진정 subquadratic 시간, 즉 O ( N 2 - ε을 ) 일부 ε > 0n0Nnn0n×nMAn,MvMvO(n2ε)ε>0. (이것은 크기 까지 각 행렬에 대해 개별 알고리즘을 허용합니다 .)n0×n0

이제 우리는 진정으로 subcubic 시간에 OMV를 해결할 :
이진 행렬을 감안할 때 사이즈의 N × N , N = 2 , k는 일부 KN > n은 0 , 우리는 분열과 정복 전략을 사용합니다. 우리는 M2 k - 1 × 2 k - 1 크기의 네 개의 서브 매트릭스 M 1 , M 2 , M 3 , M 4 로 나눕니다 . 만약 2 K - 1Mn×nn=2kkn>n0MM1,M2,M3,M42k1×2k1 , 우리는 알고리즘을 사용 2 K - 1 , M I , 그렇지 않으면, 우리는 재귀. ( n 0 은 고정 된 숫자이므로 일정한 시간에 올바른 알고리즘을 선택할 수 있습니다.)2k1n0A2k1,Min0

최대 재귀 단계 가 필요 합니다. 또한 n 벡터 v 1 , , v n의 경우 n 계산을 수행합니다. 따라서 모든 행렬-벡터 곱셈을 처리하려면 총 계산 시간 O ( n 3 - ε log n )가 필요 합니다.O(logn)nv1,,vnnO(n3εlogn)

로그는 다항식보다 느리게 (특히 루트보다 느리게) 성장하는 것으로 잘 알려져 있습니다. ~ ε < ε로 일부 을 고정 하면 전체 계산이 실제로 서브 큐빅 시간 (특히 O ( n 3 - ε ) )에서 실행되고 있음을 알 수 있습니다. 따라서 OMv 추측은 틀릴 것입니다.ε~>0ε~<εO(n3ε~)

( 크기가 m × n 이고 mn 이 2의 거듭 제곱이 아닌 경우, nm 을 다음 2의 거듭 제곱으로 늘릴 수 있으므로 실행 시간의 경계가 여전히 적용됩니다 .)Mm×nmnnm

결론 : 입력 행렬에서 대소 문자 구분을 사용하여 빠른 알고리즘을 도출 할 수 있다면 OMv 추측을 향상시킬 수 있습니다.


저자와 vzn이 지적한 것처럼, 이것은 사실이 아니며, 벡터는 이진이 아니며, 행렬은 필요하지 않으며 N x N은 필요 없으며 저자는 연산을 미리 계산하기를 원하며 온라인 처리가 필요하지 않습니다. 추측을 바탕으로 충분하지 않습니다. 두 논문은 의문의 여지가 없습니다. 여기서는 최소한의 연산을 제공하기 위해 상수 매트릭스를 사전 계산하는 것입니다. 완전한 밴드 형 대칭 사례에 대해 서로 다른 접근 방식이있을 수 있습니다.
Evil

@EvilJS : M x N 행렬과 실수 벡터를 허용하면 문제가 내가 대답 한 것보다 더 어려워집니다 (즉, 온라인 부울 행렬-벡터 곱셈은 특별한 경우입니다). O (n ^ 3)보다 더 일반적인 문제를 실제로 더 빨리 해결할 수 있다면 추측도 개선 할 수 있습니다 (큰 뉴스가 될 것입니다!). 또한 저자는 벡터에 대해 처음 알 수없는 질문에 대한 의견을 제시합니다. 모든 벡터를 미리 알고 있다면 빠른 행렬 곱셈을 사용할 수 있습니다 (예 : Strassen 알고리즘 버전).
tranisstor

방금 저자의 사례가 "실제 벡터"라고 지적했습니다. Thomas 행렬을보십시오-O (n)의 특수한 행렬의 경우. 나는 일반적인 경우를 암시하지 않습니다. 그리고 Matrix가 일정하고 벡터가 알려진 경우 Strassen; (
Evil

@EvilJS : 나는 당신이 말하려는 것을 완전히 이해하지 못합니다. 물론 Thomas 매트릭스와 같은 특수한 유형의 매트릭스의 경우 상당한 속도를 얻을 수 있지만 일반적으로 더 어렵습니다. 어쩌면 내가 소개 한 문제가 전처리 단계 (벡터가 도착하기 전에)를 고려한다는 것을 지적해야 할 수도 있습니다. 내가 제공 한 모든 매트릭스에 대해 알고리즘을 체계적으로 "하드 코딩"하는 방법을 알려줄 수 있다면 추측도 향상시킬 수 있습니다 (이 하드 코딩 단계를 알고리즘의 전처리 단계로 구현할 수 있기 때문에).
tranisstor

작동한다는 데 동의했다. 그러나 윌리엄스의 2 번째 심판은 특별히 이진 행렬을 고려하지 않는 것 같습니다. 여기에
vzn

-2

이것은 본질적으로 연구 수준의 CS이며, 문제는 적어도 두 가지 형태로 연구되며, 희소 행렬의 곱셈 중 하나 (예를 들어 인용 된 논문)와 "이진 희소 행렬"의 특수한 경우도 연구됩니다. 두 번째 경우는 직선 프로그램 최적화와 관련이있는 것으로 알려져 있습니다. 최소 프로그램은 또한 두 가지 유형의 "게이트", 덧셈 및 곱셈을 갖는 DAG와 유사 할 수 있으므로 일부 회로 최소화 문헌이 이에 연결될 수 있으며 "선반 외"소프트웨어가 목적에 맞게 조정될 수 있습니다. 여기에 두 번째 사례 에 대한 구체적인 언급 이 있고 기본적인 초기 경험적 연구와 함께 cstheory 에 대한 동일한 질문이 있습니다.


1
O(n)O(n2)

제목에서 알 수 있듯이 희소 행렬은 참조 입니다. 아마도 당신은 논문의 정의와 다른 정의를 가지고 있습니까? 희소성에 대한 정확한 정의에 민감하다면 (대부분 상관 관계가 있고 거의 상호 교환이 가능합니다) 질문에 명시해야합니다.
vzn

1
내가 관심있는 행렬은 밀도가 높은 행렬입니다. 그건 그렇고, 이것이 내 질문을 완전히 해결한다고 생각하지는 않지만 대답에 감사드립니다.
Nick Alger 4

ok, sorry! got mixed up, didnt realize the exact question. on cursory look your example #2 has less than ½ fill & looked "sparse" to me & figured some of the sparse theory would be at least somewhat applicable. basically the more dense the matrix, the less the operation can be optimized, so probably most of the theory about this type of optimization is oriented around sparse matrices.
vzn

-3

not sure if this problem has been studied exactly but this research is related & seems a reasonable lead/ start. it looks at hypergraph decomposition for sparse matrix multiplication. binary matrices are a special case of this approach. this approach will find more optimal strategies than the "straight" multiplication method. further optimizations (within this framework) might be possible based on the binary matrix property.


2
I don't see what this has to do with the question. That paper is about partitioning matrix multiplication among a distributed system, for parallel computation, to minimize the amount of inter-processor communication. What does that have to do with this question? The question does not seem to mention anything about parallel computation or inter-processor communication. I encourage you to edit your answer to make the connection more explicit.
D.W.

afaik its the same problem and minimizing the parallel computation also minimizes a single processor implementation of the same calculations. at least, the questioner did not rule out parallel implementations.
vzn

1
Thank you for the link. However I am skeptical of the method for this problem since it does not take advantage of the fact that the matrix entries contain only zeros and ones, whereas this property is very important, as far as I can tell. For example, the "running total" algorithm in the first example will only work if all the nonzero entries in a given column of the matrix have the same value.
Nick Alger

NA 귀하의 관찰 / 이의 제기는 답변에서 다루어집니다. 0/1 속성을 사용하여 추가 최적화가 가능할 수 있습니다. 이 방법은 병렬화에 따라 총 가산 / 곱셈 연산을 최소화하는 것으로 보입니다. 덧셈 / 곱셈 연산은 DAG에서 "게이트"로 볼 수 있으며이 기법은 게이트를 최소화합니다. 논문의 실질적인 복잡성은이 최적화 과정의 본질적인 깊고 실질적인 복잡성을 보여준다. 명시된 답변은이 어려운 문제에 대해 결정적인 것이 아니며 단지 "아무것도 아닌 것"입니다.
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.