티스토리 뷰
1. Introduction to Deep Learning / L5. Matrix Math and NumPy Refresher - Matrix Transposes in NumPy
chrisysl 2018. 6. 25. 14:21Matrix Transposes
- 대각원소를 기준으로 뒤집는것.
- 그런데 이 transpose에서 중요하게 짚고 넘어가야할 부분이 있다.
- transpose를 하려는 행렬 A가 정방행렬이 아닐 경우, transpose 이후 기존의 차원이 뒤집힌 채 shape이 바뀐다.
- 또한 열은 행으로 행은 열로 데이터들이 바뀜
- transpose는 shape이 다른 두 행렬간의 연산을 필요로 할 때 유용하게 쓰일 수 있다.
- 하지만 그 연산 결과가 내가 원하는(의도한)결과인지 고민하여 처리하여야 한다.
- 행렬의 shape의 크기가 다른 두 행렬에 대해 product를 진행하려면
- transpose를 하거나, 행렬의 순서를 바꿔 계산하는 방법이 있다.
- 그 각각의 연산 결과는 transpose 관계에 있다.
- 즉, 결과값으로 내가 원하는 차원에 맞게 행렬간 곱셈의 연산을
- transpose로 처리 할 것인지, 순서를 바꿔서 처리할 것인지 결정하면 된다.
- 위의 결과는 우리가 최초에 행렬 A의 관련 데이터들을 행(row)으로 가지고 있을떄 가능하다.
- 관련 데이터들을 행으로 가지고있는 행렬에 대해선 transpose 또는 행렬 A, B의 순서를 바꿔 계산하여도
- 우리가 얻고자하는 최종 데이터의 값에 변화가 없다.
- 그러나 관련 데이터들을 열로 가지고 있는경우 위와같은 연산을 진행하면
- 엉뚱한(서로 관련없는) 연산을 진행하게 되어 의도한 결과값을 도출해 내지 않는다.
결론
- 데이터를 행으로 가지고 있는 행렬끼리의 연산에만 transpose를 사용하여 원하는 결과값을 얻어낼 수 있다!
Transposes in NumPy
- 넘파이에서 transpose를 하려면 단순하게 T attribute를 이용하면 된다.
- transpose() 함수를 사용해도 동일한 결과를 리턴하지만 T가 대부분의 용도로 사용됨
- 넘파이에선 메모리상에서 어떠한 데이터도 이동(변경 또는 수정)하지 않고 transpose한다.
- 단순하게 해당 행렬에서의 인덱스값만 변경하기 때문.
- 그렇기때문에 transpose시에 주의해야할 점은, 해당 객체를 transpose로 수정할 때, 동일한 데이터를 공유하므로
- 원본의 변경에 주의해야한다. 원본 데이터에서도 200이라는 값이 대입되어있는것을 확인하자.
- 그러므로 transpose 행렬을 별개의 행렬이 아닌, 데이터를 sharing 하고있는 행렬로 인지하고있어야한다.
A real use case
- 행렬 inputs와 weights 에 대해 product 연산을 처리해야할 경우가 있다.
- 근데 shape이 다르므로(incompatible shapes) transpose 시켜 계산해야한다.
- transpose 시켜 계산한결과 다음과 같은 결과가 나왔다.
- 물론 inputs 행렬을 transpose 시켜 연산하여도 되지만 output의 shape이 달라질 뿐 요소의 값은 동일하다.