※ Hessian Matrix의 정식 한글명칭은 헤세 행렬인 것으로 보이나 글쓴이의 편의를 위해 헤시안 행렬, 헤세 행렬, Hessian 행렬, Hessian Matrix 등으로 혼용해 부르고자 합니다.
※ Hessian 행렬의 기하학적 의미편을 이해하기 위해선 아래의 내용에 대해 숙지하고 오시는 것을 강력히 추천드립니다.
Hessian Matrix의 정의
우선은 Hessian 행렬이 어떤 형태를 가지는지 Hessian 행렬의 정의를 알아보는 것이 중요할 수 있다.
위키피디아에 따르면 헤세 행렬(Hessian Matrix)은 어떤 함수의 2계 도함수들을 이용하여 행렬을 만든 것이다.
실함수 $f(x_1, x_2, x_3, \cdots, x_n)$에 대하여 헤세 행렬은 다음과 같이 주어진다.
\[H(f) = \begin{bmatrix} \frac{\partial^2f}{\partial x_1^2} & \frac{\partial^2f}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2f}{\partial x_1\partial x_n} \\\\ \frac{\partial^2f}{\partial x_2\partial x_1} & \frac{\partial^2f}{\partial x_2^2} & \cdots & \vdots \\\\ \vdots & \vdots & \ddots & \vdots \\\\ \frac{\partial^2f}{\partial x_n\partial x_1} & \cdots & \cdots & \frac{\partial^2f}{\partial x_n^2} \end{bmatrix}\]식 (1)을 보면 헤세 행렬의 원소는 모두 이계도함수라는 것을 알 수 있다.
주목할 점 중 하나는 함수 $f$의 이계도함수가 연속이라면 혼합 편미분은 같은데,
가령, $\frac{\partial^2f}{\partial x_1\partial x_2}$과 $\frac{\partial^2f}{\partial x_2\partial x_1}$은 같은 값을 갖게 된다.
따라서, $f$의 이계도함수가 연속이라면 헤세 행렬은 대칭행렬(symmetric matrix)이다.
2차 미분계수의 의미
Hessian 행렬의 내부 요소들이 모두 이계도함수라는 점을 생각하면, 2차 미분계수의 의미에 대해 다시 생각해볼 필요가 있다.
이계도함수의 의미를 간단하게 파악하기 위해 2차 함수 $f(x)$가 가령 다음과 같다고 하자.
\[f(x) = \frac{1}{2}*ax^2+bx+c\]이 함수 $f(x)$의 이계도함수는 $a$인데, $a$가 양수이면 아래로 볼록한 함수 형태를 갖고, 음수이면 위로 볼록한 함수 형태를 갖는다.
또, $a$의 값이 클수록 더 볼록한 형태를 갖게 된다.
그림 1. 2차함수에서 a의 부호에 따른 그래프 형태의 차이
(출처: https://j1w2k3.tistory.com/281)
그림 2. 2차함수에서 a의 크기에 따른 그래프 형태의 차이
(출처: https://j1w2k3.tistory.com/281)
이계도함수(혹은 2차 미분계수)도 마찬가지인데, 특정 입력값 $x$에서 이계도함수가 양수인 경우와 음수인 경우는 각각이 함수가 해당 입력값 $x$에서 아래로 볼록, 위로 볼록함을 뜻한다.
또, 함수의 특정 점에서의 이계도함수(혹은 2차 미분계수)의 크기가 크다는 것은 함수의 형태가 더 볼록하다는 의미를 갖는다.
Hessian matrix의 기하학적 의미
행렬과 선형변환편에서 모든 행렬은 선형변환으로 대체해 생각할 수 있다고 했다.
그리고, 선형 변환을 기하학적으로 생각하면 선형 변환이란 일종의 공간 변형이라고도 언급하였다.
(자세한 내용에 대해선 꼭 행렬과 선형변환편을 참고하길 바람.)
기하학적으로 Hessian matrix가 시행하고 있는 선형 변환은 기본 bowl 형태의 함수를 좀 더 볼록하거나 오목하게 만드는 변환이다.
아래의 두 그림을 보면 Hessian matrix가 수행한 선형 변환에 대해 좀 더 시각적으로 이해할 수 있을 것이다.
그림 3. 기본 bowl 형태의 함수를 좀 더 볼록한 bowl 형태로 만들어주는 선형 변환 과정
그림 4. 기본 bowl 형태의 함수를 saddle(안장) 형태로 만들어주는 matrix의 선형 변환 과정
그림 3와 그림 4에 해당되는 헤시안 행렬은 각각
\[\begin{bmatrix} 2 & 1 \\\\ 1 & 2 \end{bmatrix} \text{ 와 } \begin{bmatrix} 2 & 0 \\\\ 0 & -2 \end{bmatrix}\]이다.
그렇다면 헤시안 행렬이 보여주는 기하학적인 변환의 주요한 특징을 파악하기 위해선 어떤 분석이 필요할까?
그림 3, 그림 4의 우측에서 볼 수 있는 것 처럼 선형 변환의 main axis를 찾고, 그 크기를 수치화 시키는 것이다.
이 과정은 헤시안 행렬의 고유값과 고유벡터를 파악함으로써 가능할 것이다.
Hessian matrix의 고유값/고유벡터의 의미
고유값과 고유벡터편에서는 고유벡터와 고유값은 각각
선형변환을 했을 때 그 크기는 변하나 방향은 변하지 않는 벡터와 선형변환 후에 얼마만큼 그 벡터가 변했는지를 나타낸다고 언급한 바가 있다.
그림 5. 그림 3의 마지막 장면. bowl 형태의 함수를 더 볼록하게 만드는 헤시안 행렬의 변환과 그 고유값, 고유벡터
그림 6. 그림 4의 마지막 장면. 기본 bowl 형태의 함수를 안장 형태로 만드는 헤시안 행렬의 변환과 그 고유값, 고유벡터
그림 5, 그림 6의 우측을 보면 선형 변환 시의 주축 두 개가 각각 표시되어 있는걸 알 수 있는데 두 그림에서 모두
화살표가 나타내고 있는 방향은 고유벡터, 그 길이는 고유값을 의미한다.
또, 색깔이 빨간색인 경우에는 양의 고유값, 파란색인 경우에는 음의 고유값을 나타냈다.
그림 5, 6을 보면 헤시안 행렬을 이용해서 이계도함수 판정을 할 수 있음을 쉽게 이해할 수 있다.
좀 더 쉬운말로 하면, 헤시안 행렬을 이용하면 특정 함수의 특정 위치가 위로 볼록한지, 아래로 볼록한지, 안장점인지를 판단할 수 있다는 의미이다.
정리하면 다음과 같다.
- 그림 5, 6을 자세히 보면 특정 고유벡터에 대해 고유값의 크기가 클 수록 해당방향으로 더 볼록한 것을 알 수 있다.
- 헤시안 행렬의 고윳값이 모두 양수라면 함수는 아래로 볼록하며, 이것이 임계점이라면 극솟값이다.
- 반대로, 헤시안 행렬의 고윳값이 모두 음수라면 함수는 위로 볼록할 것이며, 이것이 임계점이라면 극댓값이다.
- 헤시안 행렬의 교윳값에 양수와 음수가 섞여있는 경우라면 함수는 안장의 형태를 갖고, 이것이 임계점이라면 안장점이다.
Hessian 행렬의 이용
Hessian 행렬은 Convex Optimization, 이계도함수 판정, Newton’s Method 등의 여러가지 방법에 활용되지만,
이번 Article에서는 Image Processing에서 Hessian이 활용되는 예시를 보고자 한다.
Image Processing: Vessel Detection
Image Processing을 하는 사람들에게 Hessian이라고 하면 이미지 내의 혈관 검출을 떠올린다.
아래의 그림 7은 Hessian 행렬을 이용해서 제작된 Frangi filter를 이용해 이미지 처리를 하여 혈관 영역을 검출한 것이다.
(해당 그림을 만든 Python 소스코드는 여기서 에서 확인 가능)
그림 7. 혈관이 포함된 사진과 Frangi filter를 이용해 혈관을 검출해낸 결과물
Hessian 행렬을 이용해 혈관을 검출해내는 기본적인 아이디어는 Hessian 행렬은 함수의 Bowl 형태가 얼마나 변형되었는가를 나타내주고 있다는 것에서 부터 출발한다.
이 때, Hessian 행렬의 eigenvector들은 변형의 principal axis를 나타내고 eigenvalue들은 변형정도를 나타내게 된다.
그래서 특정 point에서의 Hessian의 eigenvalue의 크기 차이가 많이 난다면 해당 point는 길쭉한 모양일 것임을 알 수 있다는 것이다.
그림 8. Hessian의 eigenvalue들을 이용한 형태 판정
출처: https://stackoverflow.com/questions/22378360/hessian-matrix-of-the-image
Hessian 행렬을 검출 method는 3차원 이미지(가령 CT)에서도 활용될 수 있다.
그림 9. 혈관이 포함된 사진과 Frangi filter를 이용해 폐 조직을 검출해낸 결과물 (3차원 CT 스캔에 적용한 결과)
출처: http://www.theobjects.com/dragonfly/dfhelp//Content/05_Image%20Processing/Frangi%20Filter.htm
참고문헌
- Deep Learning Adaptive Computation and Machine Learning (Deep Learning) / Ian Goodfellow 등 / 2015 / MIT Press / pp. 83-89
- Vessel Detection Method Based On Eigenvalues of the Hessian Matrix and its Applicability to Airway Tree Segmentation / Marcin Rudzki / XI International PhD Workshop / 2009
- Frangi filter @scikit-image (https://scikit-image.org/docs/stable/api/skimage.filters.html#skimage.filters.frangi)3.