요약


마르코브 랜덤필드(Markov random field, MRF)은 이산확률변수사이에 상호의존성을 표현하는 그래프모델입니다. 주요한 특징은 무방향성(Undirected)이며 인접한 경우에만 상호작용하는(pairwise interaction)하는 그래프의 성질을 지니고 있습니다. 관찰된 데이터로부터 알려지지 않은 변수를 추론하기위해서 주로 사용되며, 특히 이미지에서는 이미지 복원, 이미지 세그멘테이션, 객체인식 등에 주로 쓰입니다.

 

그림1. 마르코프 랜덤 필드의 예시(Pairwise random feild)

 

 

 

마르코브 랜덤 필드 정의(MRF, Markov random fields)


마르코브 랜덤필드는 마르코브 속성을 가진 그래프를 의미합니다. 이산확률변수(노드)사이의 상호의존성(edge)을 표현하는 그래프 모댈입니다. 이 노드 사이에서는 무방향성(undirect, 무향)입니다.

  • 일반적인 Markov network (=마르코브 속성(Markov property)가 있어야함)
  • 그래프모형이기에 노드(node)와 엣지(edge)가 존재하며, node은 확률변수, edge은 확률변수사이에 종속성을 의미함.

 

그림 표현

  • 검정색원(filled circle)은 관찰된 상태의 노드를 의미
  • 흰 원(empty circle)은 관찰되지 않은 상태의 노드를 의미

위의 그림1은 마르코브 랜덤필드의 흔한 예시입니다. 격자형으로 마르코브 속성을 가집니다. 쉽게 말해서 각 노드들이 확률변수 일때, 변수들 변수들간의 상호 의존성이 존재한다는 것입니다. 마르코브 속성은 현재상태가 과거상태에만 의존한다는 것인데, 이전 과거의 T상태전까지(T memory markcov라고도 함)영향을 받을 수 있음을 의미합니다. 위의 격자모형의 그래프에서는 상호의존성을 인접한 노드에서 받을 수 있습니다. 좀 더 나아가서 인접한 노드라고하지만, 이 인접한 노드들은 주변의 인접한 노드가 또 있기에(2칸 떨어진) 이전 T상태전까지 영향을 받는것처럼 생각할 수도 있습니다(하지만 2칸떨어진 노드가 직접영향을 주는 것은 절대아닙니다. 그럴거면 2칸 떨어진 노드에 직접 연결되어있어야합니다.).

 

만일 노드 3개(A, B, C)가 주어져있고, 노드A가 C을 통하지 않으면 B로갈 경로가 없다고하면 다음과 같이 표기합니다. 만일 이러한 경로가 있으면 이 노드들의 구성은 dependent한것입니다.

$X_A \perp X_B \,|\, X_C$

 

 

수식표현

  • $x_{i}$: 확률변수. 노드를 의미. 변수라고도하고 node라도 합니
  • $\psi(x_{i}, x_{j})$: 관찰되지않은 노드($x_{i}$)와 관찰되지 않은노드($x_{j}$)의 종속성을 의미. 발음은 프사이라고 합니다. 이 종속성은 메트릭스로도 표현할 수 있습니다. 통상 대칭인 정방행렬(symmetric, square matrix)여서 노드 i에서 j로 가거나 노드 j에서 노드i로 가는 것이 동일한 종속성입니다. 하지만, 이 두 노드 사이가 비대칭이어도 상관없습니다. 영문표기로는 compatible function라고합니다.
  • $\phi(x_{i}, y_{j})$: 관찰되지않은 노드($x_{i}$)와 관찰된 노드($y_{j}$)의 종속성을 의미합니다. 위의 표기와 다르게 한쪽이 관찰되지 않을 때 쓰는 notation입니다. 영문표기로는 evidence for x라고 합니다. 이미 y은 결정되어있으니 x을 구하기위한 근거라는 것이죠.
  • $N_{n}=\{m \in \mathbb{N} \,|\, (n,m) \in \varepsilon\}$: 노드 n의 엣지로 연결된 노드의 집합 (=노드N의 이웃집합)
  • $P(X_{n} \| X_{N_{n}})$: 노드n의 인접한노드(=로컬 조건부확률)로만 알고있으면$ X_{n}$의 확률을 알 수 있음을 의미합니다. 마르코브 속성을 의미합니다. [1]

 

 

마르코브 랜덤 필드의 예시


아래의 그림은 MRF의 예시입니다. 4개의 노드가 존재합니다. 3개의 노드($x_{1}, x_{2}, x_{3}$)은 관찰되지 않은 노드이고, 유일하게 node 4($y_{2}$)만 관찰된 노드입니다.

 

위 MRF을 수식으로 표현해보겠습니다.

  • 노드: 관찰되지 않은 노드1은 $x_{1}$, ..., 노드3은 $x_{3}$입니다.  반면 관찰된 노드4은 $y_{4}$입니다.
  • MRF은 각 노드사이의 종속성을 표현한다고 했습니다. 각 노드의 종속성을 아래와 같이  표현할 수 있습니다.

 

에너지함수(energy function)와 포탠셜(Potential)


마르코브 랜덤필드의 확률분포는 에너지함수를 사용하여 계산할 수 있습니다. 즉, 이런 마르코브랜덤 필드가 나오려면 어떤 확률분포였겠드냐를 의미합니다. 여기서 에너지함수라는 것을사용하는데,에너지함수는 다음과 같은 아이디에 기반합니다.

  • 높은 에너지를 가지고 있는 상태는 불안정하니 낮은 확률을 갖는다는 것
  • 에너지함수는 확률변수의 집합의 각 상태에 대한 에너지값을 부여하며, 에너지가 낮을수록 높은확률

 

깁스 분포(Gibbs distribution)을 이용해서 마르코브 랜덤필드를 정의해보겠습니다. (깁스 분포는 결합확률분포가 각 확률변수의 조건부 독립적이어서 곱한것을 의미)

 

$P(X)= \frac {1}{Z} \prod _{c\in C} \phi_{c} (x_{c})$

여기서 C은 maximal clique을 의미합니다. 즉 이 그래프에서 클리크에 속하는 모든 노드들의 확률을 다 하나하나 곱하면 전체 그래프가 될 수 있다는 것을 의미합니다. 그리고 여기서 Z은 보통 정규화 상수인데, 이 그래프에서는 다음과 같이 표현합니다.

$Z=\sum_{x}\prod _{c \in C}\phi_{c}(x_{c})$

 

이 그래프에서 $phi_{c}(x_{c})$을 다음과 같이 쓸 수 있습니다. 보통 여기서 T은 온도(temperature)라고해서 1을 쓰씁니다. 

$\phi_{c}(x_{c})=e^{-1 \frac{1}{T}V_{c}(x_{c})}$

 

각각 Z랑 $phi_{c}(x_{c})$을 알고있으니, 깁스분포에 대입해보면, 아래와 같고, 지수의 승을 덧셈으로 표현할 수 있으니까 결국 두번째식까지 얻어낼 수 있습니다. 

$P(x)=\frac{1}{Z}\prod _{c \in C} e^{-\frac{1}{T}V_{c}(x_{c})}$

$P(X)=\frac{1}{Z}e^{-\frac{1}{T}\sum_{c \in C}V_{c}(x_{c})}$

이때, $\sum_{c \in C}V_{c}(x_{c})$을 보통  $U(x)$라고하고, 에너지라고합니다. 그리고 V은 클리크 포탠셜(clique potential)이라고합니다.

 

 

마르코브 랜덤 필드와 베이지안 네트워크의 차이


마르코브랜덤필드는 베이지안 네트워크와 유사합니다. 표로 정리하면 아래와 같은 차이점이 있습니다.

  마르코브 랜덤 필드 베이지안 네트워크
정의 확률 변수 간의 조건부 독립 관계를 나타내는 무방향 그래프 확률 변수의 조건부 독립 관계를 나타내는 방향성 있는 그래프(Acyclic)
방향 Undirected Directed
두 노드의 확률 compatible function ψ_ij (x_i,x_j) Conditional probability p(x_i |x_j)
변수타입 이산 이산, 연속
순환가능 가능 불가능

 

 

 

 

Python example


MRF의 예시

import networkx as nx
import matplotlib.pyplot as plt

# 그래프 생성
G = nx.Graph()

# 노드 추가
nodes = ["x1", "x2", "x3", "y2"]
G.add_nodes_from(nodes)

# 간선 추가 및 가중치 설정
edges = [("x1", "x2", 0.9), ("x2", "x3", 0.1), ("y2", "x2", 0.1)]
G.add_weighted_edges_from(edges)

# 각 노드에 확률 변수 값을 할당 (예: 이진 랜덤 변수)
for node in G.nodes:
    G.nodes[node]['value'] = 0  # 초기값을 0 또는 1로 설정

# 노드 위치 지정
pos = {
    "x1": (-1, 0),  # 왼쪽에 위치
    "x2": (0, 0),  # 6시 방향에 위치
    "x3": (1, 0),   # 오른쪽에 위치
    "y2": (0, 1)    # 12시 방향에 위치
}

# 그래프 시각화
nx.draw(G, pos, with_labels=True, font_weight='bold', node_size=800, node_color='lightblue', font_color='black')

plt.show()

 

MRF을 이용한 iterated conditional modes(ICM)을 적용

import cv2
import numpy as np
from PIL import Image

# 이미지 불러오기
image = cv2.imread('/home/heon/repositories/detection_models/sample.png', cv2.IMREAD_GRAYSCALE)
image = cv2.resize(image, (128, 128))


noisy_image = image + np.random.normal(0, 15, image.shape).astype(np.uint8)
binary_image = cv2.threshold(noisy_image, 100, 255, cv2.THRESH_BINARY)[1]

Image.fromarray(image)
Image.fromarray(noisy_image)
Image.fromarray(binary_image)

def calculate_cost(y_p, x_p, alpha, beta, neighbors, y_k):
    cost = alpha * (1 - (y_p == x_p))
    for q in neighbors:
        cost += beta * (1 - (y_p == y_k[q]))
    return cost

def icm_reconstruction(observed_image, alpha, beta, max_iterations):
    height, width = observed_image.shape
    y_k = np.copy(observed_image)  # Initialize the restored image as the observed image.
    
    neighbors = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
    
    for _ in range(max_iterations):
        updated_y = np.copy(y_k)
        
        for i in range(1, height - 1):
            for j in range(1, width - 1):
                current_pixel = observed_image[i, j]
                best_cost = float('inf')
                best_pixel_value = None
                
                for y_p in [0, 1]:
                    cost = calculate_cost(y_p, current_pixel, alpha, beta, neighbors, y_k)
                    # print(i,j,cost, best_cost)
                    if cost < best_cost:
                        best_cost = cost
                        best_pixel_value = y_p
                updated_y[i, j] = best_pixel_value
        
        if np.array_equal(updated_y, y_k):
            break
        
        y_k = updated_y
    
    return y_k

 

Reference


[1]https://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/AV0809/ORCHARD/#:~:text=A%20Markov%20Random%20Field%20(MRF,the%20set%20of%20nodes%20S.

반응형

Information content (IC)은 언어학에서 나왔던 개념으로,문맥상에 어떤 개념이 나타내면, 이 개념이 나타내는 것은 정보의 양을 나타냅니다. 주로, 추상적인 개념(상위 개념)일수록 정보량이 많지 않기 때문에, IC값이 낮아지도록 표현이 되고, 구체적인 개념을 일컫을 수록 IC값이 높아지게 됩니다. IC값을 적절하게 설계했으면, 각 개념(또는 단어)가 얼마나 모호한지(=상위개념인지)를 알 수 있습니다. 그리고, 이러한 IC값을 온톨로지들 간의 유사도로 사용할 수 있습니다.

 

IC의 정의는 아래와 같습니다. 온톨로지 상에서 존재하는 모든 개념($C$)내에 특정 개념($c$) 은 $c \in C$이며, 0과 1사이 값을 가진다고 합니다[0, 1]. 그리고, 특정 두 개념이 IS-A 관계라고 하면, $c_{2}$가 상위텀이라면, $p(c_{1}) <= p(c_{2})$여야 합니다. 그리고, 최상위노드가 하나라면, 이 최상위 노드의 확률값은 1이 되게도록 확률을 정의합니다 [1]. 이때 IC값은 다음과 같습니다.

$IC = -log p(c)$

예를 들어, WordNet의 말뭉치내에, 아래와 같은 분류체계가 있다고합시다. 분류체계내에 하위텀으로 갈수록, 구체적이기 때문에, 빈도가 적게나오고 정보도 많을 것입니다, 반대로 상위텀일수록 추상적이 많이 나온 개념이기에, 위로갈수록 확률은 높아집니다. 이러다 극단적으로 최상위개념이면, 모든 개념을 포함하기에 확률을 1로 합니다. IC값은 logP(c)이므로, [0과 1]의 p값이 클수록 (=0.99999)에 가까울수록 0으로 수렴합니다. 반대로 0에 가까울수록 값이 엄청나게 음수가됩니다. 이 음수가된 것을 다시 -을 취하니 값은 커지게 됩니다 (Figure 2).

Figure 1. 자료. https://www.ijcai.org/Proceedings/95-1/Papers/059.pdf
Figure 2. Log fucntion. (https://saylordotorg.github.io/text_intermediate-algebra/s10-03-logarithmic-functions-and-thei.html)

 

Resnik의 semantic similarity (1995)


1995년에 Resnik은 IC을 이용해서 두 개념이 의미론적으로 얼마나 유사한지를 측정할 수 있게 했습니다. 두 개념의 유사도를 측정하기위해서 아래의 공식을 사용합니다 [2].

$sim(c_{1}, c_{2}) = max_{c\inS(c_{1}, c_{2})} [-logP(c)]$

where S(c_{1}, c_{2}) is the set of concepts that subsume both $c_{1}$ and $c_{c2}$

위의 개념에서 subsume은 "포함하다"를 의미합니다. 즉, c1, c2을 포함하는 집합을 의미하므로, 두 개념을 포함하는 상위개념들의 집합을 의미합니다. 두 개념을 포함하는 상위집합중에서 가장 IC가 높은것을 의미하므로, "두 개념을 포함하는 상위 개념중에 가장 아래에 있는 개념(=구체적인 개념)"을 의미합니다.

 

Figure 1에서 S(nickel, dime)은 COIN, CASH, MONEY, MEDIUM OF EXCHANGE...등을 포함하고, 두 개념의 유사도에 쓰이는 c은 이 중에거 가장 하위에 있는 것이기 때문에, COIN이 됩니다. 즉 COIN의 -logP(c)을 구하면됩니다. 이 P(c)은 문제마다 다르므로 구체적인 내용은 스킵합니다. 단, 이를 구하는 예시를 하나 들어보자면, 일반적인 자연어처리문제라면, 전체 corpus가 있을 것이고, 이 corpus에 단어가 전체 K개가 있다고 합시다. 그리고 워드넷이라는 taxonomy에 들어있는 개념이 h개 라면, 전체 N은 각 h가 corpus에 얼마나 있는지를 세어보면 알 것입니다. 그리고 N중에 실제 각 개념 c들이 얼마나 있는지 상대적인 빈도로 제시합니다.

Figure 3. Resnik의 WordNet에서의 IC계산 사례

 

 

[1] Ross, S. M. (2019). A first course in probability. Boston: Pearson.

[2] Resnik, P. (1995). Using information content to evaluate semantic similarity in a taxonomy. arXiv preprint cmp-lg/9511007.

반응형

요약

 

  • Clique: "가능한 가장 많은 노드들이 fully connected(=complete graph)로 연결된 undirected network". 
  • k-plex: clique의 n-1에 해당하는 엣지의수 n-k로 일반화하여 조금 완화한 개념
  • k-core: 각각의 노드들이 적어도 k에 연결되어있어야 하는 서브그레프
  • k-clique: k개의 노드로 구성되어있는 clique

 


 

특징

 

  1. maximal의 의미는 다른 가능한 많은 노드들이 최대한 많이 연결된 상태를 의미한다. (=더 clique로 추가 될만한 노드가 없는 경우 = fully connected 로 연결할 수 있는 노드가 없는 경우)
  2. Clique은 서로 겹칠 수 있으며, 이는 한 노드(vertice)가 다른 clique에 포함될 수 있음을 의미한다.
  3. Sparse network(서로서로 잘 연결되어있지 않는 네트웍)에서의 Clique의 존재는 어떤 응집력이 매우 좋은 집단이 있음을 의미한다. 예를 들어, 소셜 네트워크의 경우도, 대부분이 fully connected로 잘 연결되어있지 않고, 어쩌다 연결되고, 일부 연결되어있는 사람들끼리서는 다 연결되어있는 친목그룹따위가 존재한다. 
  4. Clique을 구성하는 노드가 N개인경우 N-1개의 edge가 존재한다.

 

 


설명 및 예시

 

1. Maximal: 아래와 같이 4개의 노드(vertices)가 fully connected로 되어있고 (서로 연결), 이 4개외에는 fully connected로 연결해볼만한 노드가 더이상 없다.

Clique: 4개의 노드들이 서로 연결되어있는 경우(=더이상 추가할 노드가 없는 경우). 예를 들어 5시 방향에 있는 노드는 3시방향 6시방향의 노드와 연결되어있지만, 12시, 9시 방향의 노드와는 연결되어있지 않다.

 

2. Clique내 노드끼리는 겹칠 수 있다. clique내의 서브그레프도 하나의 clique라는 것을 의미하지 않고, 여러 clique내에 노드가 겹칠 수 있음을 의미한다. 예를 들어, 아래를 보면 A-B를 기점으로 clique가 2개로 될 수 있다. 그리고, 노드A와 B는 서로 각각 clique에 해당한다.

 

 


k-plex: k-plex은 clique(competed graph)의 모두 연결되어있어야하는 조건을 완화한 개념이다. 위에서 clique은 모든 노드들이 연결되어있어야한다고 했고, 이 경우는 n-1개의 연결(엣지)가 존재한다고 했다. k-plex은 여기어 n-1의 엣지수를 n-k로 일반화하여 조금 완화한 개념이라고 보면 이해가 직관적이다. 보통 "k plex of size n"을 의미하는데, 네트워크 안에 있는 n개의 노드중 적어도 n-k가 fully connected 되어있음을 의미한다. 예) k=1일 경우, 일반적인 clique와 동일한 의미를 갖는다. k=2인 경우는 적어도 vertex들이 다 연결되어있거나, 모든 노드들이 하나에만 연결되어있어야함을 의미한다. 

 

 

아래의 예시는 1-plex을 의미한다. 우선 모든 V1,V2,V3,V4가 모두 각각에 연결되어 clique이다. 그리고, n-k(=|V|(vertex 수 -1)은 3이므로, 각각 모든 노드가 3개의 엣지를 가지면 되는지 확인하면된다. V1,V2,V3,V4가 각각 3개의 노드를 가지므로 1-plex도 된다. 따라서, 1-plex = clique이다. 

Clique 이자 1-plex

 

 

다음은 몇-plex일까? 답은 2-plex. 우선 fully connected가 아니기 때문에 clique은 아니다. 즉, 1-plex은 아니라는 것이다. 2-plex일까? |V|(=n)은 5이고 각V1 ,V2은 3개의 엣지를 갖는다. 2-plex가 되려면, 모든 노드들이 5-2개의 엣지를 가져야한다. 그러나 V3, V4, V5은 2개씩의 엣지를 갖는다. 즉 2-plex도 아니다. 그러나, 이 그레프는 각 노드들이 최소 2개의 엣지를 갖는다. 이를 표현하면 $\delta(G)=2$라고 보통 표기한다. 따라서, 2>=5-k라는 수식을 두면, 가능한 k는 3,4,5가된다.

k-core : k-plex와 유사한 컨셉은 k-core라는 것이 있다. k-core은 k-plex와 마찬가지로 "maximal subset of vertice"으로 각각의 노드들이 적어도 k에 연결되어있어야하는 것이다. 예를 들어, 5개의 노드로 구성된 2-core는 (5-2)-plex와 같다. k-core와 k-plex와의 차니는 k-cores은 겹치는 것이 없다. k-cores의 장점은 적어도 k의 연결이 있어야하기에, 반대로 k-1개 이하의 엣지를 가진 노드를을 찾아 없애면되니, 상대적으로 k의 수를 알기가 쉬워 실용적인 분석이 될 수 있다.

* 그리고 k-core은 원래 그레프 G의 서브그레프 중에 유일한 서브그레프가 된다.

 

 

k-clique : 유사한 명명으로 되는 그레프 중에, k-clique가 있으며, 이는 한 노드에서 다른 노드로 최대 k개 이상의의 거리가 없는 경우의 "maximal subset" 을 의미한다. 만일 k=1이라면, clqiue랑 동일하다. 즉 모든 노드가 1개 이하의 거리를 갖는다. 만일 k가 커지면, 점점 그레프가 커지는거고 그레프의 최대 거리가 커지는 것을 의미한다. 이 개념이 다른 설명서에는 clique with k vertices라고 소개가 되는 경우도 있는데, k=3이면 3개의 노드로 이루어진 clique가 된다.

2-clique의 예시

아래를 참고하면 쉬운 영상이 있다.

https://www.youtube.com/watch?v=V2CgqTLWxvY

반응형

+ Recent posts