본문 바로가기
반응형

개발 Tools92

딥러닝을 위한 기초 개념 Perceptron ( 활성함수, DNN ) Perceptron 가장 기본이 되는 단위라고 생각할 수 있다. 어떤 모델에 대해 내가 원하는 결과를 나타내는 h라고 본다. 심플하게 어떤 입력과 h에 대한 가중치를 곱한 값을 sign함수에 넣었을 때, 양수면 +1로 판단하고 음수면 -1로 판단한다. 일종의 예측값이라고 보면 된다. 이렇게 예측값과 실제 값이 있을 텐데 이 값을 비교해서 틀렸다면 가중치 w를 변경해가며 내가 원하는 결과가 나올 때까지 h를 변경해 간다. 가중치란 어떤 입력이 더 중요한지 아닌지에 대한 조절 값이다. 다음과 같은 식이 있는데 조금 더 예쁘게 하기 위해 b를 w0라고 하고 1을 x1이라고 하면 예쁜 식이 나온다. 이렇게 시그마를 행렬로 바꾸면 똑같은 결과를 나타내니 더 이쁘게 정리하기 해서 최종적으로 위와 같은 식이 나왔다... 2022. 5. 4.
딥러닝을 위한 기초 개념 Entropy ( Cross entropy, KL divergence, 엔트로피 ) Entropy 먼저 entropy에 대해 알아보자 entropy는 정보를 표현하는데 있어 필요한 평균 최소 자원량이라고 한다. 그렇다면 정보를 어떻게 표현할까? 공통적으로 bits로 표현하기로 했다. 그렇다면 비트가 길면 길수록 더 많은 자원을 썼다고 볼 수 있다. 그러니 우린 최소한으로 만들기 위해 비트의 길이를 줄여야 한다. 예를 들어보자, 대화를 하는데 100마디 중에 1마디만 욕이라고 하고, 나머진 칭찬이라고 하자. 이럴 때 욕과 칭찬을 bit로 표현할 때, 욕을 1bit, 칭찬을 3bit라고 하면 (3 bit * 99 + 1 bit * 1) = 298 bit으로 표현된다. 하지만 우린 최소 길이로 만들어야 한다. 그러니 확률이 적은 애한테 큰 bit를 할당해야 한다. 욕을 3bit, 칭찬을 1b.. 2022. 5. 2.
머신러닝 KMeans Find Optimal k ( Elbow Method, Silhouette Method ) KMeans KMeans는 중앙점 seed와 개체들 간의 평균 거리를 기준으로 군집을 형성하는 알고리즘을 KMeans 클러스트링이다. 동작 순서는 아래와 같다 1. 지정 클러스터의 수에 맞게 임의로 중심을 지정한다 2. 거리를 기준으로 클러스트링을 한다. 3. 이전 클러스트링 내에서 중심을 새로 지정한다. 4. 바꿔도 군집이 바뀌지 않으면 종료한다. 자세한 설명은 아래 글을 참고하면 좋다. https://eunsukimme.github.io/ml/2019/12/16/K-Means/ 기본적인 KMeans의 동작은 알고 있다고 생각하고, 어떻게 최적의 클러스터 개수를 지정할 수 있을지 알아보자. 두 가지 방법이 있다. 하나씩 알아보자 1. Elbow Method 2. Silhouette Method Elbo.. 2022. 3. 24.
Verilog HDL NOR Gate ( Nor 게이트, 4비트 2입력 NOR ) NOR Gate는 OR 게이트에 NOT 게이트를 이어 붙인 것이다. OR연산은 하나라도 1이면 출력이 1이다. 이런 게이트 앞에 NOT이 있으니 NOR 게이트는 하나라도 1이라면 출력은 0이다. 즉, 모두 0일 때만 출력이 1이다. module NOR (a, b, y); input [3:0] a, b; output [3:0] y; wire [3:0]y; assign y[3:0] = ~(a[3:0] | b[3:0]); endmodule DUT 코드는 간단하다. 그냥 OR연산을 하고 ~을 붙여주면 된다. 테스트 벤치는 어떻게 되는지 보자, 8비트를 다 집어넣어서 확인해 볼 예정이다. module tb_NOR; reg [3:0] a, b; wire [3:0] y; NOR u0(.a(a), .b(b), .y(y.. 2022. 2. 17.
Verilog HDL RCA ( Ripple carry adder, 리플 케리 가산기, 파형, 16bit ) RCA (Ripple carry adder) 먼저 부호 있는 수(signed)와 없는 수(unsigned)의 구분이 필요하다. 부호가 있는 수의 덧셈에서 carry는 다 버린다. 왜냐면 carry가 있든 없든 원하는 결괏값이 똑같기 때문이다. 하지만 오버플로우가 발생하기도 하는데, 이유는 결괏값이 표현 범위를 벗어나기 때문이다. 예를 들어 8bit라면, 2의 8승으로 0~ 255까지 표현 가능하지만 부호가 있기 때문에 -127 ~ 127까지다. 이 범위의 수에서 결괏값이 벗어나면 오버플로우가 발생했다고 한다. 이때는 프로그램이 오류를 나타내고 종료한다. 어떤 오류냐 하면 양수 + 양수 = 음수 음수 + 음수 = 양수와 같은 오류가 발생한다. 부호가 없는 이진수도 오버플로우가 발생한다. 8bit를 예로 들.. 2022. 2. 16.