Matrix Sparsification - Utah State University
Download
Report
Transcript Matrix Sparsification - Utah State University
Matrix Sparsification
Problem Statement
Reduce the number of 1s in a matrix
Measuring Sparsity
The way I measured sparsity was by adding
up the total number of 1s in a matrix and
dividing by the total number of elements
This gives you a number between 0 and 1
that tells you what percentage of the matrix is
filled with ones
Experiment Setup
First I generated H, which is a sparse 300x582
matrix with a column weight of 3, sparsity=.01
Then I multiplied it by a random invertible matrix.
D is the resulting dense matrix, sparsity≈.5
Then I tried to make D as sparse as the original
matrix
Comparing rowspaces
From the sparse H matrix, generate a G
matrix so that mod(H*G,2)=0
Then test D and any sparsified versions of D
to ensure that mod2 of multiplication by G still
results in a 0 matrix
GF2 difficulties
Matrix sparsification is difficult in GF2
because it requires a different set of math
rules
For example:
With real numbers, the vectors [0 1 1],[1 0 1], and
[1 1 0] are independent
In GF2, any one of those vectors can be made
from the other two
Row Echelon Form
The dense matrix starts with sparsity≈.5
In an [m x n] matrix, row reduction will give m columns with only
one 1 in them.
The rest of the columns should be approximately half 1s
Now sparsity≈(m+.5*(n-m)*m)/(n*m)
The more square a matrix is, the more this step helps.
Null Space
Row Echelon Form tries to make the pivot columns
the earliest possible columns
By computing the null space of the original matrix,
and then computing the null space of that null
space, you get back the original rowspace
Now the pivot columns are in different locations
SP2 function
Find the row which reduces the number of 1s the
most.
A(row,:)*AT is a vector that gives the number of
matching 1s in each row (i.e. the number of 1s that
will be eliminated if the rows are added)
(1-A(row,:))*AT = a vector giving you the number of
1s that will be introduced if the rows are added.
SP2 function
If B= A(row,:)*AT - (1-A(row,:))*AT, then finding
the maximum of B will reduce the sparsity the
most per row addition.
But first, you have to set B(row)= -n, because
otherwise B(row) will always be the
maximum, and you can’t add a row to itself.
SP2 function
If max(B) is positive, then adding rows helps sparsify
the matrix
If max(B) is 0, then adding rows keeps the sparsity
the same, but changes the location of the 1s
When max(B) is negative, it makes the matrix more
dense, but it can be helpful in overall sparsification
because it helps get you out of local minimums
SP3 function
First I make a matrix of all possible combinations of
two different rows and also the original rows that I’m
testing on
This new matrix has (m-1)Choose2 + (m-1) rows
Then I follow the same process as with the SP2
function, but using this new matrix, instead of one
made up of only the original rows
Why not add 3?
The matrix size grows too quickly.
With 300 rows, the matrix for adding 1 or 2
rows has 44850 rows, and the matrix for
adding 1 to 3 rows would have 4455399
rows.
Why not add 3?
You could break the matrix down into multiple
smaller matrices, then save the best row from
each matrix and add in the best overall row
One reason for the significant improvement
when adding two rows instead of one is that
in GF2 1+1=0.
Orthogonal Projection
The easiest way to span a space is with orthogonal
vectors
If the projection of vector a onto b is greater than .5,
then b is a significant component of a, so removing
it will make the vectors closer to orthogonal, and the
matrix more sparse
i.e. if((a·b)/(|b|2)>.5)
rowa=mod2(rowa+rowb)
LDPC Decoding results
In LDPC codes, every 1 in a matrix
represents a connection between check
nodes and variable nodes.
Reducing the sparsity of a matrix makes
LDPC decoding faster, and more reliable
SNR Vs. Probability of Error