16 distances by 바죠

16 distances


기계학습의 3요소: representation, evaluation, optimization
기계학습은 목적함수를 활용한다.
이 목적함수를 최적화한다.
데이터 포인트들 사이의 거리를 활용한다.

기계학습의 핵심은 데이터들 사이의 거리를 잘 정의해서 최대한 분해능 있게 자료를 재배치하는 것이다. 
거리를 잴 수 있어야 적당한 거리로 재배치할 수 있다.

차별모델, 생성모델 모두 아주 이상적인 거리 측정자가 필요하다. 
다양한 샘플링을 위해서도 우리는 이상적인 거리 측정자가 필요하다.

볼츠만 머신에서는 쿨백-라이블러 거리를 이용하였다.

두 문자열 사이의 거리: Levenstein 거리를 사용한다. dynamic programming일종으로 볼 수 있다.
이 때, 두 문자열의 길이는 같을 필요가 없다.
두 문서의 사이의 거리도 마찬가지로 정의된다.


이러한 작업을 수행하기 위해서 우리는 distance measure가 필요하다.


# calculate the kl divergence
def kl_divergence(p, q):
return sum(p[i] * log2(p[i]/q[i]) for i in range(len(p)))
# calculate the js divergence
def js_divergence(p, q):
m = 0.5 * (p + q)
return 0.5 * kl_divergence(p, m) + 0.5 * kl_divergence(q, m)



두 이미지 사이의 유사도, 이것도 매우 중요한 양이다.
왜냐하면, 동일한 이미지를 만들려고 할 때, 인공신경망 매개변수들(weights, biases)이 변해야만한다. 지도학습의 경우 그렇다.
similarity 는 -1, 1사이의 값을 가진다.
따라서, 1-similarity는 거리에 해당한다. 
Pearson's correlation coefficient도 마찬가지이다. -1에서 1사이의 값을 가진다.


PSNR 값 계산하기
from math import log10, sqrt
import cv2
import numpy as np
  
def PSNR(original, compressed):
    mse = np.mean((original - compressed) ** 2)
    if(mse == 0):  # MSE is zero means no noise is present in the signal .
                  # Therefore PSNR have no importance.
        return 100
    max_pixel = 255.0
    psnr = 20 * log10(max_pixel / sqrt(mse))
    return psnr
  
def main():
     original = cv2.imread("original_image.png")
     compressed = cv2.imread("compressed_image.png", 1)
     value = PSNR(original, compressed)
     print(f"PSNR value is {value} dB")
       
if __name__ == "__main__":
    main()


multi-scale structural similarity index
structural similarity index
multiscale structral similarity index
SSIM은 미분가능하기 떄문에 loss로 사용할 수 있다. L1 loss가 픽셀 하나하나를 비교하는 것과 다르게 SSIM loss는 대상 픽셀의 local region을 비교한다.
pip install sewar

두 가지 그림을 비교하는 방법들일반적으로 3 가지 방법으로 비교가 가능합니다.

 

from skimage.measure importcompare_ssim, compare_psnr, compare_mse

import cv2

img1 =cv2.imread(r'C:\Users\Wxr\Desktop\WATERLOO\train_low_high\29.jpg')

img2 =cv2.imread(r'C:\Users\Wxr\Desktop\WATERLOO\train_normal\29.jpg')

psnr = compare_psnr(img1,img2)

ssim = compare_ssim(img1,img2, multichannel=True) # For multichannel images (RGBHSV etc. )key word multichannel To set up for True

mse = compare_mse(img1,img2)

print('PSNR{},SSIM{},MSE{}'.format(psnr, ssim, mse))



def levenshteindist(str1,str2):
    arr = [[None for _ in range(len(str1)+1)] for _ in range(len(str2)+1)]
    for i in range(len(str2)+1):
        arr[i][0] = i
    for j in range(1, len(str1)+1):
        arr[0][j] = j
        arr[1][j] = j-1
    for i in range(2, len(str2)+1):
        for j in range(1, len(str1)+1):
            if str1[j-1] == str2[i-1]:
                arr[i][j] = arr[i-1][j-1]
            else:
                arr[i][j] = min(arr[i-1][j], arr[i-1][j-1], arr[i][j-1]) + 1    
    return arr[-1][-1]

def levenshtein_distance(a, b):
    d = np.zeros((len(a), len(b)))
    for i in range(len(a)):
        d[i, 0] = i
    for j in range(len(b)):
        d[0, j] = j
    for j in range(len(b)):
        for i in range(len(a)):
            if a[i] == b[j]:
                cost = 0
            else:
                cost = 1
            d[i, j] = min(d[i-1, j]+1, d[i, j-1] + 1,d[i-1, j-1] + cost)
    return d[len(a)-1, len(b)-1]

  S = "water"
  T = "wine"
  Computed distance =    3
  Correct distance  =    3

  S = "kitten"
  T = "sitting"
  Computed distance =    3
  Correct distance  =    3

  S = "saturday"
  T = "sunday"
  Computed distance =    3
  Correct distance  =    3

  S = "pheromones"
  T = "photographer"
  Computed distance =    8
  Correct distance  =    8
import Levenshtein

비지도 학습, 클러스터링 방법들:



http://incredible.egloos.com/7513584




2012년이 딥러닝의 원년이다. → 왜 그런가? 여기에는 다양한 이유가 있다. 
2011년 Relu 함수의 출현 : vanishing gradient problem 해결, 표현력이 높은 딥러닝이 시작됨.
2012년 Dropout 방법의 출현 : overfitting problem 해결, 정규화된 훈련이 가능함.
2012년 CNN 출현 : 방대한 이미지 데이터 처리 문제 해결, 비대칭 데이터에 대한 처리가 가능함.
2013년 VAE 출현: 생성모델로서 다양한 가능성을 제안함.
2014년 GAN 출현: 생성모델로서 많은 응용 가능성을 제안함.
2015년 TensorFlow 구현의 출현과 보급 : 실질적인 딥러닝의 민주화가 단행됨.
2016년 알파고 출현 : 바둑 정복
2017년 알파고 제로 출현 : tabula rasa, first-principles 방법을 이용하여 바둑 정복, 진정한 바둑의 정복이 가능함. 기보없이 바둑 정복함. 프로기사에게 절대로 지지 않는 사실상 바둑의 신이 탄생함. 바둑의 역사 5000년
2017년 cycleGAN 출현
2018년 알파폴드 출현
2020년 알파폴드 2 출현
2021년 플로어플랜닝 (반도체 칩 설계) A graph placement methodology for fast chip design | Nature
2021년 나우캐스팅 (단기 일기예보) https://www.nature.com/articles/s41586-021-03854-z



핑백

덧글

  • 바죠 2021/12/14 20:21 # 삭제 답글

    https://towardsdatascience.com/image-classification-using-ssim-34e549ec6e12
    structural similarity index
  • 바죠 2021/12/14 20:29 # 삭제 답글

    SSIM은 미분가능하기 떄문에 loss로 사용할 수 있다. L1 loss가 픽셀 하나하나를 비교하는 것과 다르게 SSIM loss는 대상 픽셀의 local region을 비교한다.
  • 바죠 2021/12/16 14:09 # 답글

    https://www.nature.com/articles/s41524-021-00668-5
    Coevolution
댓글 입력 영역

최근 포토로그