1. 행렬이란
행렬에 관해 알기 위해 많은 생각을 했다. 필자도 처음에는 그냥 도서관에서 아무 교재나 빌려서 공부를 했다. 단순히 공식을 외우고, 문제를 풀었고, 연립방정식을 풀기 위한 일환으로 했다고 생각을 했다.
하지만 행렬 자체는 정말 다양한 용도로 쓰일 수 있다.
이상엽 math는 행렬은 "각종 응용의 열쇠"라고 했다.
https://www.youtube.com/watch?v=525w2Zqh13M&list=PL127T2Zu76FuVMq1UQnZv9SG-GFIdZfLg
필자는 결국 그 의미를 체감하지 못했지만, 반대로 행렬은 "무엇이든 될 수 있는건가?"라는 생각을 가지게 되면서, 여러가지 방향에서 이를 받아 들이게 되었다.
맨 처음에는 딥러닝에서 정형 데이터를 다루기 위해, 만들어진 csv파일을 보고, 행렬이라고 생각을 했다. 행렬은 단순히 열벡터를 눞혀서, 층층이 쌓은 것이라고 생각했가.
컬럼1 | 컬럼2 | 컬럼3 | 컬럼4 | |
1번 데이터 | 정보 | 정보 | 정보 | 정보 |
2번 데이터 | 정보 | 정보 | 정보 | 정보 |
요런 느낌의 하나의 행렬이라고 생각을 했다.
실제로 데이터 분석가 입장에서는 이를 행렬이라고 생각하고, PCA(주성분 분석)같은 통계 기법을 활용한다. 하지만 딥러닝에서는 오직 가중치만을 위한 것을 생각해야 한다고 생각한다.
딥러닝에서의 가중치는 데이터를 기준으로 올바른 선을 찾는 것이며. 이는 사상(mapping)과 관련되어 있다. 사상이라고 하니, 사고 방식과 헷갈리지만, mapping 이라는 의미로, "A 좌표에 있던 것을 B 좌표로 옮긴다"라고 생각해야 한다. map 자체에는 여러가지 뜻이 있는데, 그중 한개는 "특정 위치로 표시하다"라는 의미가 있고, 파이썬을 공부하면 map()함수가 있는데, "특정 변수에 어떠한 값을 할당한다"라는 효과를 가지고 있다.
3blue1brown에서 나온것처럼, 데이터 좌표를 표현하는 "축" 그 자체를 변환하는 것을 의미한다.
https://www.youtube.com/watch?v=kYB8IZa5AuE&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab&index=3
행렬을 공부할때, row와 column을 자주 헷갈렸던 기억이 있다. 구분하는 것을 기억하기 위해, 여러가지 영상을 보고 시도를 해봤지만, 그냥 자주보고 오래보는게 정답이었다. 한번에 확 기억하는 방법이 있으면 얼마나 좋을까.
행렬 = W | column=0 | column=1 | column=2 |
row=0 | W[0][0] | W[0][1] | W[0][2] |
row=1 | W[1][0] | W[1][1] | W[1][2] |
접근하기 위해서는 먼저 row부터 입력해야 한다는 점 기억하자. 참고로 행렬은 영어로 matrix라고 하지만, matrices는 복수의 행렬을 말할때 쓴다. metric랑 헷갈리지 않도록하자
어떠한 벡터가 행렬을 지나가면, 축이 바뀌는데, 이러한 현상을 "선형 사상"이라고 한다(실제로는 사람들은 "선형 변환"linear transform 이라고 더 많이 사용한다, 하지만 책에 따르면 수학에서 "변환"은 "대등한 것에 이동한다"라는 의미가 있으며, 엄밀하게 map이라고 표현한다고 한다).
익숙치 않다고 느낀다면, "칸 아카데미"에서 선형대수를 공부하는것도 정말로 좋은 방법이다.
https://ko.khanacademy.org/math/linear-algebra
강의 퀄리티도 좋고, 한국어 자막도 있다. 또한 강의를 설명하는 사람은 영어를 쓰지만, 최대한 쉬운 영어를 쓰려고 해서, 중학생 레벨의 영어 듣기가 된다면, 문제 없이 들을 수 있다. 또한 수학 용어를 기본적으로 '강조'를 하면서 발음 하는 경우가 많기에, 머릿속에 더 많이 남기도 한다.
수학의 영어 용어가 익숙하지 못하다고 하면 칸 아카데미는 정말로 해볼 가치가 있다고 생각한다. 그 외로는 설명 뿐만 아니라 수식으로 인한 증명을 알고 싶은 사람에게 추천한다.
이런 식으로 축 자체가 바뀌는데, 우리가 여기서 상기시켜야 하는 것은 딥러닝은 "근사 함수"이라는 것이다. 데이터가 변하는 것이 아닌, 데이터에 맞춰서 함수가 변하는 것이다. 이 말을 이해하기 위해서 추가적인 깨알 상식으로, 컴퓨터는 데이터를 '한줄'로 저장하고 '이미 저장한 데이터의 위치나 순서는 바뀌지 않는다', 데이터를 불러오는 호출 방식은 바뀌지만, 데이터가 저장된 위치는 바뀌지 않고, 심지어 '데이터는 항상 1열로 나란히 저장된다'.(이건 컴퓨터 공학책에서 cpu를 공부하면서 이해하게 되었다)
2. 행렬 곱은 합성함수를 뜻한다.
합성함수는 쉽게 말해 이런 것이다. 함수 f(x)와 g(x)가 있을 때 g(f(x)) 같이 함수 안에 함수가 있을 때 이를 "합성함수"라고 부른다.
행렬 A와 B가 있고, 벡터 x에 대해 y = BAx라고 한다면(볼드체는 벡터를 의미한다), 이는 y = g(f(x))라고 볼 수 있다. 따라서 행렬 곱은 순서도 정말로 중요하다.
AB != BA 라는 것이다(!= 는 같지 않다는 의미다)
이게 중요한 또 다른 이유는 딥러닝에서 역전파(backpropagation)라는 부분이 있는데, 미적분 분야이지만, 미적분에 "연쇄법칙"이라는 상식이 있으며, 이는 그에 맞는 계산 순서가 행렬 곱에 따라 결정이 된다. 이러한 상식은 머리속에 기초지식으로 깔아놓아야 논문을 볼때도 도움이 된다.
이쯤 되면, 왜 A(mxn)행렬 과 B(nxd)행렬을 곱하면, mxd차원 C행렬이 나타난다와 같은 행렬 곱에서 나타나는 차원의 특징을 설명 안하냐고 할 수 있지만, 그냥 너무 많은 곳에서 이미 이에 대해 설명하기도 했고, 애초에 누군가를 가르치기 위함이 아닌, 혼자만의 생각 정리 이기 때문이다.
3. 다양한 행렬과 그 의미
(1)영행렬: 고유값 같은 특정한 값을 구하기 위해 가끔 사용됨.
(2)역행렬: 컴퓨터 그래픽에서 "이미 했던 행위를 되돌리는" 행위를 의미하는 행렬, 정도만 알아도 공부하는데 지장이 없다.
(3)단위행렬: 숫자 1 같은 존재이다. 행렬은 일종의 함수라고 생각하는 것을 기억하면, 이를 "항등함수"라고도 부른다.
(4)대각행렬: ' \ ' 느낌으로 행렬 A(mxn)에서 m==n을 만족하는 성분들을 제외하고 모두 0인 정방행렬(행렬이 정사각형 모양을 띄운다)을 뜻하는데, 이게 뜻하는게 무엇이냐면, 선형변환이 없고, 그냥 스케일링 한 결과라고 볼 수 있다.
(5)블록행렬: 일정한 선으로 행렬 안에서 구역을 나눈것이다. 그냥 계산했을 때와 똑같은 값이 나오도록 일정하게 구역을 나눠야 한다.
솔직히 그냥 단순히 복잡한 식을 표기할때 편하게 하려고 사용하는 것 같다. (아래와 같이)
추가)
(6)전치행렬: 행렬 A(mxn) => transpose => A^T(nxm), 이거는 그냥 모델에서 유도리 있게, 행렬 곱을 할때 사용하기 위함이다.
'(딥러닝을 위한)선형대수학 > (딥러닝을 위한)선대 1장' 카테고리의 다른 글
1.3 행렬식: 영공간 Null Space(Ker A), Im A 상(rank) (1) | 2024.09.11 |
---|---|
1.1 벡터와 공간 (0) | 2024.09.09 |