전체 글 28

[통계학] 베이즈 정리

1 베이즈 정리 베이즈 정리는 두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나타내는 정리로 사전 확률에서 추가로 얻은 정보로 사후 확률을 구할 수 있다.$$ P(A|B) = \frac{P(B|A)P(A)}{P(B)} $$ 수식은 위와 같고, P(A|B)가 사후 확률, P(A)가 사전 확률이고, 나머지 확률이 추가로 얻은 정보라고 보면 된다.  참고로 베이즈 정리는 워낙 부피가 커져서 베이지안 통계학으로 하나의 통계 분야가 되었다.2 예시 실제 예시는 아니고, 이해를 돕기위해 하나 만들겠다. A를 시험 평균 성적이 80점 이상인 학생으로 두고, B를 학원을 다니는 학생으로 두겠다.  총 100명의 학생중 A인 학생은 40명, B인 학생은 60명, A이면서 B인 학생은 30이라 할 때, P(A)는 ..

수학/통계학 2024.06.12

[논문리뷰] Attention Is All You need(transformer)

고3 때 했던 논문리뷰용어사전 attention: 문맥에 따라 집중할 단어를 결정하는 방식, 행렬곱을 이용해 구현한다.  self-attention: 한 문장이 있을 때 문장에서 각 단어들의 관계를 찾는 방법  transformer: attention 기법만을 적극적으로 활용하여 만든 모델   softmax: 입력받은 값을 모두 0~1사이의 값으로 정규화하면서 값들의 총합이 1이 되도록 만드는 함수, 확률을 구하는 함수이기도 하다.  mask: 참조하고 싶지 않은 단어는 미리 지워두는 함수, 지금 해석되지 않은 단어를 미리 참조할 필요는 없기에 사용된다. 해석할 필요없는 단어에 -에 해당하는 값을 넣어 구현한다.  embedding: 특정 단어나 문장을 벡터로 만든 것, 컴퓨터의 경우는 자연어를 이해할 ..

논문리뷰/nlp 2024.06.07

[개발] 객체지향

1 객체지향 객체지향은 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍이다. 객체지향의 4가지 특징은 추상화, 상속, 다형성, 캡슐화이다.2 추상화 추상화란 본질만을 추출하는 것이라고 보면 된다.  예를 들어 사람 4명이 있다면 서로 이름, 나이 , 키와 몸무게 등이 다르겠지만 추상화하면 모두 인간이라는 점이 같을 것이다. 그러니 인간 클래스를 만들어 객체의 공통적인 속성과 기능을 정의한다.  3 상속 상속이란 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 방법이다. 이 때 기존 클래스를 부모 클래스라 하고, 새로운 클래스를 자식 클래스라고 한다.  메서드 오바라이딩으로 예를 들면 게임 캐릭터가 적과 플레이어가 있을 때 둘 다 이동을 하니까 인간..

개발 2024.06.03

[개발] 컴파일러와 인터프리터

1 컴파일러 컴파일러는 파일 전체를 기계어로 번역시키는 프로그램이다. 컴파일 과정은 총 4단계이다.  처음으로 전처리 단계이다. 전처리 단계에는 전처리기 매크로나 주석을 처리한다. 다음으로 컴파일 단계이다. 컴파일 단계에는 각종 소스 코드를 어셈블리 명령어로 번역한다. 다음으로 어셈블 단계이다. 어셈블 단계에는 어셈블리 코드를 기계어로 번역한다. 마지막으로 링킹 단계이다. 링킹 단계에는 번역한 기계어 코드를 한 곳에 모아 실행 파일로 만든다.   대표적인 예로 c언어가 컴파일러를 사용한다.2 인터프리터 인터프리터는 한 줄씩 기계어로 번역시켜 바로 실행하는 프로그램이다. 그래서 인터프리터의 경우에는 따로 exe파일을 만들지 않고, 바로 실행이 된다.  인터프리터의 경우에는 실행 시 컴파일러보다 느리다. 왜..

개발 2024.06.02

[개발] 라이브러리와 프레임워크

1 라이브러리 라이브러리는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 위키백과에서 들고 왔는데 너무 어렵게 설명해서 쉽게 말하자면 자주 사용되는 코드들을 작성해서 모아놓은 것이 라이브러리라고 알면 되겠다.  예를 들자면 python에서는 import로 들고 오는 것과 c에서는 include로 들고 오는 것이 라이브러리이다.2 프레임워크 프레임워크는 소프트웨어나 시스템 등을 쉽게 개발하고 구축할 수 있도록 마련되어 있는 구조이다.  예를 들자면 django나 java spring 등이 있다. 3 차이점 라이브러리와의 차이점은 프레임워크는 정해진 틀에서 만들게 하고, 라이브러리는 몇 가지 기능만 필요한 것을 가져와 사용할 수 있도록 제공한다. 그리고 프레임워크는 라이브..

개발 2024.05.28

[개발] API란?

API를 사용하지만 막상 제대로 알아본 적이 없어서 정리해본다.1 API  API는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다.  일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다. 그러니까 일반 사용자가 사용하는 것은 아니고, 개발자들이 어떤 프로그램을 개발할 때 사용하는 용도이다.  API를 사용하는 이유는 단순하다. 그게 시간도 단축되고, 편리하기 때문이다. 내가 원래 개발해야하는 부분을 남들이 개발해놓은 것을 사용하면 훨씬 효율적일 것이다. 다만 API는 내가 만드는게 아닌 만큼 사용법이 바뀔 수도 있으니 그 때마다 프로그램을 수정해야한다.2 OpenAPI OpenAPI는 누구나 사용할 수 있도록 공개해놓은 API이다. 보통 함수로 어떤 요청을 보내면 서버에서 요청을 처리 ..

개발 2024.05.28

[통계학] 정규분포 (가우시안분포)

1 정규분포 정규분포는 연속확률 분포 중 하나이다. 사람의 키나 몸무게 등이 정규분포를 따르며 거의 웬만한 자료들이 정규분포를 따른다.  정규분포는 평균과 표준편차를 알면 그릴 수 있는데 평균($\mu$)은 정규분포의 중앙을 의미하고 표준편차($\sigma$)는 얼마나 자료가 펴져있나를 의미한다.2 표준정규분포 표준정규분포는 정규분포에서 평균이 0이고, 표준편차가 1일 때를 의미한다. 이 것만으로 의미가 있지는 않고 정규화를 통해 의미를 가진다.3 정규화 정규화는 기존 정규분포를 표준정규분포로 바꾸는 것을 의미한다. 정규화를 하는 방법은 정규분포를 따르는 모든 자료에 평균을 빼고 표준편차로 나누면 된다.  이렇게 바꿈으로써 서로 다른 평균과 표준편차를 가지던 데이터를 직접 비교할 수 있게된다. 그리고 데..

수학/통계학 2024.05.21

[데이터 전처리] 이상치 처리 (통계적 방법)

1 z-score   z-score는 기존 분포를 표준정규분포를 따르도록 바꾼 후에 신뢰구간 바깥의 데이터는 이상치로 판별하는 방식이다. 신뢰구간이 99%인 경우에는 평균에서 3*표준 편차만큼 떨어진 구간까지 정상값이라고 생각하고 신뢰구간 95%는 평균에서 2*표준 편차만큼 떨어진 구간까지 정상값이라고 생각한다.  간단한 방법이고 편리하지만 자료의 분포가 정규분포를 따른다는 가정하에 쓰는 방법이기에 자료가 정규분포를 가질 때만 제대로 사용할 수 있다.2 IQRIQR은 사분위수를 이용해서 중앙값을 탐지하게 된다.  IQR은 3사분위수에서 1사분위수을 뺀 값이고,  3사분위수+1.5*IQR~1사분위수-1.5*IQR 사이를 제외한 값을 이상치라고 판별한다. 3 주의점 이상치를 처리하면 좋지만 만약 가진 자료가..

[자료구조] 우선순위 큐

1 우선순위 큐우선순위 큐는 말 그대로 큐이긴 큐인데 우선순위를 부여하는 큐이다. 보통 크기순으로 우선순위가 부여되며 우선순위가 더 큰 것이 있다면 더 느리게 들어왔더라도 먼저 나온다.  보통 구현을 할 때 이진트리를 이용해 구현을 하게 된다. 삽입할 때는 이진트리를 채울 때 깊이가 가장 낮고 제일 왼쪽부터 노드를 채운다. 그 후 부모 노드와 자식 노드를 비교해서 부모 노드보다 자식 노드가 우선순위가 더 높다면 위치를 바꾼다. 방금 전에 한 것을 루트 노드까지 반복한다.  삭제할 때는 제일 마지막에 있는 그러니까 깊이가 가장 깊으면서 제일 오른쪽에 있는 노드와 루트 노드를 변경한다. 그 후에는 루트 노드였던 것을 삭제하고, 현재 루트 노드는 지금 우선순위 큐 규칙과 맞지 않을 것이니 부모 노드와 자식노드..

자료구조 2024.05.15

[알고리즘] 유니온 파인드(Union-Find)

1 유니온 파인드 유니온 파인드란 어떤 한 노드와 다른 노드가 같은 그래프에 있는지 확인하기 위한 알고리즘이다. 유니온 파인드는 속도를 빠르게 하기 위해서 기존 그래프를 한 개의 노드에 전부 연결된 모양으로 바꾼다. 그러면 2개의 노드가 같은 그래프에 속해 있다면 중심의 노드에 둘 다 연결되어 있을 것이니 중심의 노드가 같은지만 확인하면 된다.  구현 방식은 배열을 이용해서 하게 된다. 배열은 arr[n] 형태로 arr[k](k 그래프를 합칠 때는 간선으로 연결된 노드 번호 2개를 받는다.  그리고 각 노드가 연결된 그래프에서의 중심 노드를 찾는다. 중심 노드를 찾는 방법은 배열에서 노드의 번호와 중심 노드의 번호가 같다면 중심 노드이다. 그래서 중심 노드를 찾으면 2개의 중심 노드가 나올건데 만약 둘의..