rbdus0715의 등록된 링크

 rbdus0715로 등록된 네이버 블로그 포스트 수는 100건입니다.

인공지능융합세미나[1회차] - Knowledge Distillation 기술동향 소개 [내부링크]

인하대 인공지능융합연구센터, ABBI AI융합센터, BK21 AI교육연구단에서 공동으로 주관한 "인공지능융합세미나"에 참가했습니다. 3월 5일부터 매주 화요일마다 열리는 이 세미나는 최신 인공지능 기술의 연구 동향에 대한 다양한 분야의 높으신 분들의 인사이트를 엿볼 수 있는 좋은 기회인 것 같았습니다. 군대에 있어서 밖에 있는 분들하고 소통을 할 수 있다는 것 자체만으로도 좋았습니다. 차례를 봤는데 첫 번째 회차의 주제로 Knowledge Distillation를 아주대학교 교수님이 강의를 해주신다고 해서 관심을 가질수밖에 없었습니다. 최근에 KD 관련 분야에 공부를 시작해보기도 했고, 뉴스에서 국내 연구진이 이미지 생성 모델을 "지식 증류"(한국어로 번역하면 살짝 어렵네요)를 통해 경량화 해서 Dalle보다 더 빠르게 이미지를 생성해내는 모델을 개발했다는 소식을 접한 이후로 KD 분야에 대해 궁금해졌습니다. 이미지 생성 모델 경량화 모델을 확인할 수 있는 허깅페이스 링크입니다.

[인빅학회 머신러닝 세미나] 1주차 - 데이터 전처리 (3/23) [내부링크]

#파이썬 #파이썬머신러닝완벽가이드 #머신러닝 #알고리즘 <1주차에 발표한 내용> '파이썬 머신러닝 완벽가이드(권철민)' - p182까지 <기초 라이브러리> 파이썬을 통해 머신러닝을 하기 위해서는 넘파이와 판다스 라이브러리의 기초가 필요하다. 물론 책에서도 잘 설명 되있었지만 유튜브를 통해서 배우는게 훨씬 쉬웠다. 유튜브에 '파이썬 활용편'을 검색하면 다양한 라이브러리들을 공부할 수 있다. numpy 행렬을 편리하게 다룰 수 있는 도구이고, pandas는 데이터를 손쉽게 핸들링 할 수 있는 도구이다. 머신러닝 개발환경으로 아나콘다(주피터 노트북)를 선택하였다. 한 줄씩 바로바로 결과값 확인할 수 있어서 보기도 편했고, 필요한 라이브러리가 이미 설치되어있어서 좋았다. 사이킷런 라이브러리 공부 순서 (기초) <사이킷런 라이브러리> 머신러닝(사이킷런 라이브러리 사용)이 작동되는 순서를 간략하게 하면 다음과 같다. 1. 데이터 불러오기 2. 학습, 테스트 데이터로 분리하기 3. 학습 / 예측

[자료구조] 0. 목차 [내부링크]

공부 자료 : 코딩 테스트를 위한 자료구조와 알고리즘 with C++ 1. 리스트, 스택, 큐 연속된 자료구조, 연결된 자료구조 std::array std::vector std::forward_list 반복자 std::list std::deque 컨테이너 어댑터 벤치마킹 2. 트리, 힙, 그래프 비선형 문제 트리 - 상하 반전 문제 다양한 트리 구조 힙 그래프 3. 해시 테이블과 블룸 필터 해시 테이블 해시 테이블에서 충돌 C++ 해시 테이블 블룸 필터

[자료구조] 1-01. 연속된 자료구조와 연결된 자료구조 [내부링크]

연속된 자료구조와 연결된 자료구조 데이터 관리를 효율적으로 하기 위해서 적절한 자료구조와 알고리즘 선택이 중요함 선형자료구조 -> 연속된 구조, 연결된 구조 <연속된 자료구조> 모든 원소를 하나의 연속된 메모리 덩어리 인 ‘청크’에 저장 모든 데이터가 같은 데이터 타입 / 같은 크기의 메모리를 사용 data[0] data[1] data[2] data[3] n 번째 웡소에 접근하기 위해: -> 첫번재 위치 + n* sizeof(type) -> 데이터 접근 시간 O(1) 배열의 종류: -> 정적 배열 : 스택 매모리, 선언된 블록이 끝나면 소멸 int arr[size] -> 동적 배열 : 힙 영역, 사용자가 직접 해제하기 전까지 유지 C : int* arr = (int*)malloc(size * sizeof(int)); C++ : int* arr = new int[size]; 연속된 자료구조의 장점: -> 캐시의 지역성이 좋음 (원소 접근성이 뛰어남) <연결된 자료구조> 서로 다른 메모

[자료구조 알고리즘 입문] 1. 기본 알고리즘 [내부링크]

책에서는 알고리즘을 본격적으로 시작하기 앞서서 쉬운 알고리즘부터 소개하고 있습니다. if문과 if else 같은 제어구조를 활용한 최댓값 찾기 프로그램인데 너무 기본적인 내용이니깐 빠르게 연습문제 몇개만 뽑아서 풀고 넘어가야겠습니다!ㅎㅎ 최댓값 찾기 함수 n단의 숫자 피라미드 만들기 알고리즘 풀이 5를 입력했을 출력문

[자료구조 알고리즘 입문] 2. 기본 자료구조 [내부링크]

이번 단원에서 배우는 내용은 2가지 입니다. 2-1 배열 2-2 구조체 1. 배열 배열의 선언 자료형 배열이름[요소 개수]; 배열 초기화 ex) int a[5] = {1,2,3,4,5}; 배열 a의 원소의 개수 sizeof(a) / sizeof(a[0]) <배열의 동적할당> 배열의 크기를 n개로 해서 필요할 때 필요한 만큼의 크기의 배열을 불러올 수 없을까요? int n; cin >> n; int array[n]; 하지만 이렇게 하면 컴파일 오류가 발생합니다. 이렇듯 필요할때 필요한 만큼 메모리를 확보하는 것을 동적할당이라고 합니다. 메모리 확보를 위해 제공되는 함수 calloc, malloc 둘다 헤더파일 <stdlib.h>를 불러와야합니다. void *calloc(개수, x); // x 바이트만큼의 공간을 '개수'만큼 할당합니다. void *malloc(x); // 크기가 x바이트인 메모리를 할당합니다. (여기서 void 포인터는 어떤 변수의 주소이든지 다 받을 수 있습니다 !!

[인빅학회 머신러닝 세미나] 3주차 - 선형회귀 (4/6) [내부링크]

<3주차에 발표한 내용> '파이썬 머신러닝 완벽가이드(권철민)' - p290 ~ 318 (저희 조의 맏형이 발표해주셨습니당) <회귀는 무엇일까?> 우리는 흔히 함수를 떠올릴 때 y = f(x)꼴을 많이 떠올립니다. 어떠한 인풋값 x 가 투입되었을 때 그 결과가 f(x)인 모형 (집합 X -> 집합 Y)이 가장 일반적이죠. 우리 일상에서도 이러한 함수를 한번 찾아볼까요? 근데 여러분이 생각하기에는 다른 함수일 겁니다. 우리의 성적에 영향을 끼치는 요소들은 정말 다양하죠. (핑계 말고요..) 예를들어 공부량, 체력, 스트레스, 행복, 운(?) 등이 있을 겁니다. 이러한 변수들을 X1, X2, X3, X4 .... 이라고 하고, 그 결과로 도출되는 성적을 Y라고 해봅시다. 그럼 아래와 같은 함수가 만들어질 수 있겠네요. Y = f (X1, X2, X3, X4, ... Xn) 간단하죠? 근데 이렇게 되면 구체적으로 각각의 독립변수들이 Y값에 어떻게 영향을 주고있는지 모르기 때문에 식을 다시

[자료구조 알고리즘 입문] 3. 검색 [내부링크]

선형검색 보초법 이진검색 bsearch 구조체에서 검색

[자료구조 알고리즘 입문] 4. 스택과 큐 [내부링크]

스택 스택은 후입선출 구조로 되어있습니다. 스택에 데이터를 넣는 작업을 푸시, 꺼내는 작업을 팝이라고 합니다. (위의 그림은 푸쉬와 팝을 나타낸 그림입니다.) 큐 큐는 선입선출 구조를 이루고 있습니다. 큐에 데이터를 넣는 작업을 인큐, 꺼내는 작업을 디큐라고 합니다. 데이터를 꺼내는 쪽을 '프런트', 데이터를 넣는 쪽을 '리어'라고 합니다.

[자료구조 알고리즘 입문] 5. 재귀 알고리즘 [내부링크]

<재귀?> 어떤 사건이 자기 자신을 포함하고, 다시 자기 자신을 사용하여 정의될 때를 재귀적이라고 합니다. <팩토리얼 함수> 입력 : 4 출력 : 24 <유클리드 호제법 - 최대공약수 구하기> 입력 : 8 22 출력 : 2 <하노이의 탑> 입력 : 3 출력 : 원반 [1]를(을) 1기둥에서 3기둥으로 옮김 원반 [2]를(을) 1기둥에서 2기둥으로 옮김 원반 [1]를(을) 3기둥에서 2기둥으로 옮김 원반 [3]를(을) 1기둥에서 3기둥으로 옮김 원반 [1]를(을) 2기둥에서 1기둥으로 옮김 원반 [2]를(을) 2기둥에서 3기둥으로 옮김 원반 [1]를(을) 1기둥에서 3기둥으로 옮김

[자료구조] 1-02. std::array [내부링크]

std::array std::array는 메모리를 자동으로 할당하고 해제합니다. 원소의 타입과 배열의 크기를 매개변수로 사용하는 클래스 탬플릿입니다. <기본 사용법> 배열 생성, 원소 접근 배열 생성 std::array<int, 10> arr1 ->> int arr1[10] 배열 원소에 접근하는 방법 arr1[인덱스] arr1.at(인덱스) <array를 함수의 인자로 사용하기> 다른 함수로 전달하는 방법 (값, 참조, const 가능) -> C 스타일처럼 전달할 때 포인터 연산, 참조 같은거 안해도 됩니다. <배열의 두번째 요소를 가져오는 함수> #include <iostream> #include <array> using namespace std; void print(array<int,5> arr) { cout << arr[1]; } int main() { array<int, 5> arr1={1,2,3,4,5}; print(arr1); } 위에서는 크기 5개짜리만 입력받을 수 있습

[자료구조] 1-03. std::vector [내부링크]

std::vector std::array는 실제 응용 프로그램 개발에서 사용하는 몇몇 기능을 제공하지 않는 단점이 있습니다. 크기가 고정되어서 원소 추가, 삭제를 하지 못합니다. 메모리 할당 방법을 변경하지 못합니다. 이러한 문제를 해결하기 위해서 std::vector을 사용합니다. <기본 사용법> 벡터 초기화 방법 std::vector<int> vec; 크기가 0인 벡터 선언 std::vector<int> vec = {1,2,3,4,5}; 지정한 초깃값으로 이루어진 크기 5 벡터 std::vector<int> vec(10); 크기가 10인 벡터 선언 std::vector<int> vec(10, 5); 크기가 10, 모든 원소가 5인 벡터 선언 <새로운 원소 추가하기> push_back() 과 insert() # 벡터에 새로운 원소를 추가하기 위한 함수 push_back(), insert() 각각 걸리는 시간은 대체로 O(1), O(n) # 예제코드 vector<int> vec; /

[자료구조] 1-04. std::forward_list [내부링크]

std::forward_list 지금까지의 배열, 벡터 같은 연속된 자료 구조에서는 데이터 중간에 자료 추가, 삭제하는 작업이 매울 비효율적입니다. -> 연결 리스트와 같은 형태의 자료 구조가 등장 기본적으로 연결 리스트 구성하려면 포인터를 하나 가지고 있어야 하고, new와 delete 연산자를 이용하여 메모리를 할당하고 해제해야 합니다. <원소 삽입과 삭제> 삽입 forward_list<int> fwd_list = {1,2,3}; fwd_list.push_front(0); // 맨 앞에 0 추가 {0,1,2,3} auto it = fwd_list.gegin(); fwd_list.insert_after(it, 5); // 맨 처음 원소 뒤에 5 추가 {0,5,1,2,3} 삭제 forward_list<int> fwd_list2 = {1,2,3,4,5}; fwd_list2.pop_front(); // 맨 앞 원소 삭제 {2,3,4,5} auto it = fwd_list.begin();

[웹 개발 입문] 0. 모던 웹을 위한 html5+css3바이블 목차 [내부링크]

HTML5 + CSS3 기본 1. html5 개요 2. Html5 태그 기본 3. CSS3 선택자 기본 4. CSS3 스타일 속성 기본 2. HTML5 + CSS3를 사용한 레이아웃 구성 1. 웹 페이지 레이아웃 2. 스마트폰 레이아웃 3. 태블릿 pc 레이아웃 4. 소셜커머스 메인 페이지 3. HTML5 + CSS3 심화 1. CSS3 변형과 애니메이션 2. CSS3 변환 3. CSS 추가 규칙과 반응형 웹 4. 그리드 시스템

[웹 개발 입문] 1. 1~2 html5 개요와 태그 기본 [내부링크]

(복습하려고 올리는 글) <!DOCTYPE html> <!--현재 웹 페이지가 html5 문서임을 인식--> <html lang="en"> <!--어떤 언어로 이루어져 있는지 쉽게 인식, 굳이 안해도 됨--> <head><!--바디 태그에서 필요한 스타일시트와 자바스크립트를 제공--> <!--head태그에 넣을 수 있는 것들 : meta(추가정보 제공), title(제목), script(스크립트추가), link(파일추가), style(스타일시트 추가), base(기본 경로 지정)--> <title>Document</title> </head> <body><!--바디 태그는 사용자에게 보이는 실제 부분--> <!-----------글자 태그 : 제목 본론 앵커태그 글자형태 루비문자------------> <!--제목 : h1~h6 제일 큰 제목태그~6번째로 큰 제목태그--> <h1>heading</h1> <!--본론 태그 : p(본문), br(줄바꿈), hr(수평 줄) --> <p>my

[웹 개발 입문] 1. 3 CSS3 선택자 기본 [내부링크]

(공부 기록용) <!DOCTYPE html> <html lang="en"> <head> <title>Document</title> <style> /*전체 선택자*/ *{color:rgb(114, 69, 69);} /*태그 선택자 - 여러개 한꺼번에 가능*/ h1, p{color: red;} /*아이디 선택자(단 하나만)와 클래스 선택자(여러개 선택)*/ #write{width: 500px; float:left; background: blue;} .class{color: bisque;} /*속성 선택자-> 어떠한 태그에 특정 속성을 가진 것을 선택 선택자[속성~=값] : 특정 단어 포함 선택자[속성|=값] : 특정 단어 포함 (위와 차이점은 하이픈(-)을 인식하지 않고 나누어서 인식한다는 것) 선택자[속성^=값] : 속성 안의 앖이 특정 값으로 끝나는 태그 선택 선택자[속성$=값] : 특정 값으로 시작하는 태그 선택 선택자[속성*=값] : 특정 값을 포함하는 태그 선택 */ input

[자료구조] 1-05. 반복자 [내부링크]

반복자 반복자는 객체 지향적 프로그래밍에서 배열이나 자료 구조 내부의 요소를 순회하며 접근하는 객체입니다. 예제 #include <iostream> #include <forward_list> #include <vector> using namespace std; int main() { vector<string> vec = { "lewis hamilton", "lewis hamilton", "nico roseberg", "sebastian vettel", "lewis hamilton", "sebastian vettel", "sebastian vettel", "sebastian vettel", "fernado alonso" }; auto it = vec.begin(); // 상수 시간 cout << "가장 최근 우승자: " << *it << endl; it += 8; cout << "8년 전 우승자: " << *it <<endl; advance(it, -3); // advance 는 반복

[웹 개발 입문] 1. 4 CSS3 스타일 속성 기본 [내부링크]

스타일 속성 끝! <!DOCTYPE html> <html lang="en"> <head> <title>Document</title> <style> /*------CSS3단위 : 크기 단위, 색상 단위, URL 단위------*/ /*크기 단위 : %, em(배수), px -> 절대크기(px)를 정해두고 상대크기로 조정하는 방식 사용*/ p:nth-child(1){font-size: 100%;} /*색상 단위 : background-color: red;, 색상 단위 : #000000, rgb(), rgba, hsl, hsla*/ /*URL 단위*/ body{ background-image: url('사진이름.jpg'); } /*------가시 속성 : display 속성, visibility 속성, dpacity 속성------*/ /*display 속성 : none(아예 공간까지 사라짐), block, inline, inline-block(가로 세로 모두 지정 가능)*/ #box{

[웹 개발 입문] 2. 1 웹페이지 레이아웃 [내부링크]

웹페이지 레이아웃 예제 연습! <!DOCTYPE html> <html> <head> <title>Document</title> <link href="https://fonts.google.com/share?selection.family=Source%20Code%20Pro" rel="stylesheet" type="text/css" /> <!--초기화 : 모든 웹 브라우저에서 동일한 출력 결과를 만드는 데 사용--> <style> *{margin: 0; padding: 0;} body {font-family: sans-serif;} li {list-style: none;} a {text-decoration: none;} img {border:0;} </style> <!--헤더--> <style> #main_header { /*중앙 정렬*/ width: 960px; margin: 0 auto; /*절대 좌표*/ height: 160px; position: relative; /*자손이 ab

머신러닝 복습 [내부링크]

1. 파이썬 기반의 머신러닝과 생태계의 이해 1) 머신러닝 개념 - 지도학습 분류, 회귀, 추천 시스템, 시각, 텍스트 분석 - 비지도 학습 클러스터링, 차원 축소, 강화학습 2) 파이썬 머신러닝 생태계를 구성하는 패키지 skip 3) 넘파이 # 라이브러리 불러오기 import numpy as np # ndarray array1 = np.array([1,2,3]) # 1차원 행렬 array2 = np.array([[1,2,3],[2,3,4]]) # 2행 3열 array3 = np.array([[1,2,3]]) # 2차원 행렬 # ndarray 쉽게 생성 (초기화) sequence_array = np.arange(10) zero_array = np.zeros((3,2), dtype='int32') # 3행 2열, int 형 0으로 초기화 (디폴트값은 float64) one_array = np.ones((3,2)) # 3행 2열을 1로 초기화 # 차원 크기 변경 reshape() arr

string algorithm [내부링크]

string pattern matching algorithm 접미사 배열 / LCP의 기초 https://blog.myungwoo.kr/57 (전명우) https://koosaga.com/m/125 (구사과) http://web.stanford.edu/class/cs97si/suffix-array.pdf (스탠포드) https://blog.naver.com/kks227/221028710658 (라이 kks) string matching altorithm https://blog.myungwoo.kr/101?category=517571 (전명우) http://web.stanford.edu/class/cs97si/10-string-algorithms.pdf (스탠포드) kmp altorithm https://koosaga.com/156 (구사과) https://injae-kim.github.io/dev/2020/07/23/all-about-kmp-algorithm.html (블로그 글)

algorithm [내부링크]

출처 : https://cp-algorithms.com/#navigation Main Page - Algorithms for Competitive Programming June 8, 2022: Tags are enabled. Each article is now marked whether it is translated or original, overall tag info is present in the tag index . For translated articles, clicking on From: X tag would lead to the original article. June 7, 2022: Date of last commit and author list with contribution per... cp-algorithms.com Algebra Fundamentals (6) Binary Exponentiation Factoring Exponentiation Euclidean al

Binary Exponentiation [내부링크]

분할 정복을 통한 곱셈에 대한 글이다. 백준을 처음 시작했을 때 1629 번을 풀었던 적이 있었는데 처음에는 그냥 맞을 줄 알았다. 하지만 지금 와서 보니 거듭제곱을 분할하여 풀어야하는 것이었다. https://www.acmicpc.net/problem/1629 1629번: 곱셈 1629번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 곱셈 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.5 초 (추가 시간 없음) 128 MB 66459 17942 13182 26.177% 문제 자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. 출력 첫째 줄에 A를 B번 곱한... www.acmicpc.net a^n를 계산하기 위해 o(N)의 시간을

Sieve of Eratosthenes [내부링크]

고등학교 때 에라토스테네스의 체를 배웠던 것 같다. 사실 뭐 고등학교 수학에서 쓰일 일은 거의 없고 그 노가다를 할 만큼 시간이 많지 않기 때문에 별로 사용하진 않았다. 컴퓨터는 우리보다 단순 계산을 훨씬 잘하기 때문에 이 노가다를 맡겨도 된다. 하지만 조금 더 효율적으로 구현현할 필요가 있다. 에라토스테네스의 체는 어떤 수의 배수들을 모조리 지우는 방식으로 소수를 구한다. 공간 복잡도는 O(N), 시간 복잡도는 O(N*log(logN))로 구현할 수 있다. 코드는 다음과 같다. int n; vector<bool> is_prime(n+1, true); is_prime[0] = is_prime[1] = false; for (int i = 2; i <= n; i++) { if (is_prime[i] && (long long)i * i <= n) { for (int j = i * i; j <= n; j += i) is_prime[j] = false; } } 카운트를 제곱근까지만 해서 개선

Euler's totient function (피 함수) [내부링크]

알고리즘 공부하면서 정수론을 처음 접해보는데 데였다.. 그렇지만 확실히 재미있었다. 나중에 증명과정도 하나하나 공부하고 싶다는 생각이 들었다. 오늘 공부한 내용은 오일러의 토티엔트 함수이다. 다른 말로 피 함수라고 불린다고 한다. 함수의 기능은 다음과 같다. 정수 m이 주어졌을 때 1 <= x < m 인 x 중 m과 서로소인 정수의 개수 1부터 21까지 피 함수 값을 구한 것을 나열한 사진이다. 컴퓨터를 통해서 피 함수를 구하기 위해서는 이 피 함수를 일반화시켜야 한다. 그 전에 몇가지 짚어야 할 사항이 있다. 소수 p에 대하여 서로소 a와 b에 대하여 (중국인의 나머지 정리를 통해서 증명할 수 있다고 하는데 이 부분은 더 공부해야할 것 같다.) 위의 성질들을 종합하여 구한 정수 n에 대한 pi 함수는 다음과 같다. # 구현 코드 int phi(int n) { int result = n; for (int i = 2; i * i <= n; i++) { if (n % i == 0) {

Basic Geometry (기본 연산 구현) [내부링크]

기하 알고리즘들을 다루기 위해서는 유클리드 공간에 대한 이해가 필요하다. 또한 구현도 할 줄 알아야한다. 아직 기하 문제들을 많이 안 풀어봐서 더 좋은 방법, 더 편한 방법이 무엇인지는 잘 모르기 때문에 일단은 구글링 해서 나온 내용을 정리하고자 한다. 기본 사칙 연산과 내적, 외적에 대해서 다루고 있다. 그 전에 먼저 유클리드 공간에서 좌표를 어떻게 구현하는지 알아보자. (코테에서는 기하문제가 잘 안나온다고 하는데 그냥 백준 문제 풀고 싶어서 공부하는 중) https://cp-algorithms.com/geometry/basic-geometry.html#definition_1 구조체까지 써가면서 조금 어렵게 구현한 코드이다. 별로 하고싶지 않은 방법... 왜 굳이 구조체까지 써 가면서 구현했는지는 잘 모르겠지만 지금 공부하는 입장에서는 그냥 받아들여야 할 것 같다. 나같으면 굳이 구조체 안에 모조리 구현 안하고 그냥 밖에서 일일이 계산 할 것 같긴 하다. 바로 뒤에서 쉬운 구현이

GAN (gans in action) [내부링크]

이론 배경 적대적 훈련 GAN 에서 생성자와 판별자는 자신만의 비용 함수를 가지는 함수로 표현 판별자의 손실을 사용하여 역전파로 두 네트워크를 훈련 판별자는 진짜와 가짜 샘플에 대한 손실을 최소화하려고 노력함 반면 생성자는 자신이 생성한 가짜 샘플에 대해 판별자의 손실이 최대화되도록 노력함 생성자가 흉내 내려는 샘플의 종류는 훈련 데이터셋으로 결정됨 ex) 목적 : 실제와 같은 고양이 이미지를 만드는 것 -> GAN에 고양이 이미지 데이터셋을 주입 생성자는 패턴을 합성하는 것을 학습함 비용함수 J 생성자의 비용함수 : J(G) 판별자의 비용함수 : J(D) 두 네트워크 훈련 파라미터 : θ (가중치와 절편 W, b) 생성자의 파라미터 : θ(G) 판별자의 파라미터 : θ(D) GAN과 합성곱 신경망의 차이점 2가지 (1) 전통적 신경망의 비용 함수 J는 훈련 파라미터 θ의 항으로 정의함 J(θ) 이에 반해 GAN의 두 네트워크는 비용함수가 두 네트워크의 파라미터에 모두 의존 -> 생

이미지 분류 연습&공부 [내부링크]

맨날 딥러닝 이론하고 코드 공부만 했지 정작 프로젝트 경험은 많이 없는 것 같았다. 그래서 2학기 동안에는 실습에 초점을 맞추어 공부하려고 한다. 그리고 가끔씩 논문도 하나씩 읽어볼 계획이다. 용어 익숙해질때까지 계속해서 해석해보고 직접 구현해봐야겠다. 읽어보면 좋을 논문 (참고사이트) https://bigsong.tistory.com/47 [딥러닝] 이미지 분류를 이해하기 위해 읽어야 하는 논문 Top10 본격적으로 컴퓨터비전 영역에 대해 공부하기에 앞서 이미지 분류 알고리즘이 어떤 종류가 있는지 알아두면 좋을거 같아 이미지 분류와 관련된 논문 top10을 읽어보고 리뷰해보려고 한다. 새로운 알고리즘이 등장.. bigsong.tistory.com 연습 데이터 (캐글) http://insightcampus.co.kr:9090/insightcommunity/?pageid=4&mod=document&uid=12908 15개의 데이터셋을 사용한 머신러닝 및 데이터 사이언스 프로젝트 아이디

[Pytorch 딥러닝] 1. start [내부링크]

https://github.com/rbdus0715/Deep_learning GitHub - rbdus0715/Deep_learning: Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드 Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 저의 깃헙 저장소 링크입니다. 모두를 위한 딥러닝 보며 공부한 코드들입니다.

[Pytorch 딥러닝] 2. 선형회귀 [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-02%20linear%20regression.ipynb Deep_learning/Lab-02 linear regression.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 처음으로 배울 것은 선형 회귀입니다. 예전에 머신러닝 스터디에서 깊게 소개한 내용이므로 간단하게 보고, 코드를 살펴보겠습니다. 1차함수 선형회귀 torch와 optim을 각각 임포트하였습니다. 선형회귀를 진행할 데이터는 위와 같습니다. 보시면 아시겠지만 두배씩 커지는 선형함수를 구하는 것이 목적입니다. 즉 y = 2x

[Pytorch 딥러닝] 3. MSE [내부링크]

*이번 장은 전 장과 중복되므로 넘어가도 됩니다!* https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-03%20deeper%20look%20at%20GD.ipynb Deep_learning/Lab-03 deeper look at GD.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 실습 코드이다. y = x 선형회귀 (2장과 별 다른 내용은 없었음) 그래도 수 채우기 위해서 넣음 loss 함수

[Pytorch 딥러닝] 4. 다중 선형 회귀 / nn.Module 사용하기 [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-04-1%20multivariable%20linear%20regression.ipynb Deep_learning/Lab-04-1 multivariable linear regression.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 실습 코드입니다. 변수가 여러개인 모델을 찾는 다중 선형 회귀 이번 데이터는 위와 같습니다. 국어 73, 수학 80, 영어 75 일때 (다음학기 국어 + 수학) 점수 예측하기? 이정도로 생각해도 될 것 같아요 학습할 파라미터는 W, b입니다. 보시면 저번 선형

[Pytorch 딥러닝] 5. 로지스틱 회귀 - 이진 분류 / 평가 / nn 구현 [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-05%20logistic%20(sigmoid)%20regression.ipynb Deep_learning/Lab-05 logistic (sigmoid) regression.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 실습 코드입니다. 로지스틱 회귀 - Sigmoid function 를 통해서 이진 분류하기 저희가 분류할 데이터는 다음과 같습니다. 0 아니면 1, 이진 분류 입니다. 여기서 가설 값이 sigmoid function으로 들어갑니다. cost 값은 다음과 같습니다. 다음은 c

[Pytorch 딥러닝] 6. softmax / cross-entropy / nn [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-06%20softmax%20classification.ipynb Deep_learning/Lab-06 softmax classification.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com N-ary 분류 저번 글에서는 바이너리 분류였다. 즉 남자냐 여자냐. 하지만 우리는 머신러닝에서 다양한 무리로 분류해야할 떄가 있다. 예를 들어 사진을 보고 어떤 꽃인지 맞추기! 꽃 사진이 1000장이고, 꽃 종류가 7가지라면 1000장을 7개의 무리로 나누어야한다. 어떻게 가능할까? 각 입력들을 잘

[Pytorch 딥러닝] 7. mnist dataset [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-07-2%20mnist%20data%20set.ipynb Deep_learning/Lab-07-2 mnist data set.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 새로 필요한 도구들 datasets을 불러오기 위한 torchvision.datasets 내가 원하는 형태로 데이터를 변형하기 위한 transforms 시각화를 위한 plt 손글씨 숫자인 mnist 데이터로 분류 실습 <데이터 불러오기> 전체 데이터 셋을 15바퀴 돌면서 학습할 것이고, 총 6만장의 사진들을 100장씩

[Pytorch 딥러닝] 8. xor perceptron / multi layer perceptron [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-08-1%20perceptron.ipynb Deep_learning/Lab-08-1 perceptron.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com perceptron 세 가지의 논리 연산자가 있다. 첫번째는 AND이다 AND는 두개의 입력값이 모두 1일 때만 참을 반환하는 연산자이다. OR은 둘 중 하나만 1이면 참을 반환한다. XOR은 두개가 다를 때 참을 반환한다. AND와 OR은 위의 사진과 같이 일차함수 하나만으 선형적으로 점들을 구분할 수 있다. 즉 앞서서 배웠던 하나의 li

[Pytorch 딥러닝] 9.vanishing gradient / overfitting [내부링크]

https://github.com/rbdus0715/Deep_learning/tree/main/torch-deep-learning Deep_learning/torch-deep-learning at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com 이번 챕터에서 다룰 내용은 4가지이다. 활성화함수 ReLU 가중치 초기화 Drop out batch normalization banishing gradient는 back propargation (역전파) 단계에서 구하는 gradient들이 희미해져가는 현상을 의미한다. 가중치와 편향을 잘 업데이트 하기 위해서는 이 gradient 값을이 잘 보존되어야하는데 많은 레이어를 쌓을수록 희미해진다. 또한 모

[논문 읽기] ImageNet Classification with Deep Convolutional Neural Networks (1) [내부링크]

(2012) Abstract 1) introduction 2) the dataset 3) the architecture ReLU nonlinearity training on multiple GPUs local response normalization overlapping pooling overall architecture 4) reducing overfitting data augmentation dropout 5) detail of learning 6) results qualitative evaluations 7) discussion 요약: 우리는 120만장의 고화질 이미지를 1000개의 서로 다른 클래스로 분류하는 엄청나게 큰 CNN을 훈련시켰어요. 모델 평가 때는 top1 에러율도 달성했습니다. 모델은 다음과 같이 구성되어 있어요 . 6천만개의 파라미터와 65만개의 뉴런으로 이루어짐 5개의 conv layer -> max풀링 레이어, 3개의 FC layer (1000개 분류를 위

[Pytorch 딥러닝] 10. convolution NN [내부링크]

https://github.com/rbdus0715/Deep_learning/blob/main/torch-deep-learning/Lab-10-1%20convolution.ipynb Deep_learning/Lab-10-1 convolution.ipynb at main · rbdus0715/Deep_learning Pytorch 기본 조작 정리 / '모두를 위한 딥러닝' 공부 코드. Contribute to rbdus0715/Deep_learning development by creating an account on GitHub. github.com convolution neural network는 합성곱 신경망이라고 불린다. Conv1d에 대해서 알아보자 convolution 네트워크도 결국은 hidden 네트워크를 이루고 있는 부품 중 하나이다. 하지만 네트워크를 통과하는 방식이 기존 선형적인 fully connected layer와는 뭔가 연결이 더 복잡해 보인다. 한 문장으로

[자연어 처리] Lab-1-1 통계 기반 기법과 분산표현 [내부링크]

https://github.com/rbdus0715/Natural-Language-Processing/blob/main/Lab-1%20Distributed%20Representation.ipynb Natural-Language-Processing/Lab-1 Distributed Representation.ipynb at main · rbdus0715/Natural-Language-Processing 파이썬을 활용한 자연어 처리 공부 저장소입니다. Contribute to rbdus0715/Natural-Language-Processing development by creating an account on GitHub. github.com 분포 가설 컴퓨터에게 우리의 말을 학습시키려면 어떻게 해야할까? 인간의 말은 한 끝 차이로 의미가 달라지기도 하고 짧은 문장이지만 다양한 의미를 함축하기도 하기 때문에 굉장히 까다로운 주제이다. 인간의 입장에서는 단어 하나하나의 의미와 정의를 잘 알

[자연어 처리] Lab-1-2 통계 기반 기법 개선 [내부링크]

https://github.com/rbdus0715/Natural-Language-Processing/blob/main/Lab-1%20Distributed%20Representation.ipynb Natural-Language-Processing/Lab-1 Distributed Representation.ipynb at main · rbdus0715/Natural-Language-Processing 파이썬을 활용한 자연어 처리 공부 저장소입니다. Contribute to rbdus0715/Natural-Language-Processing development by creating an account on GitHub. github.com 저번 통계 기반 기법 글과 이어지는 내용이다. 통계 기반 기법의 단점들을 알아보고 이것을 해결하기 위한 방법을 생각해보자. 상호 정보량 차원 축소 상호 정보량 상호 정보량을 구글에 검색해 보았더니.. 상호정보량(mutual information)은

[자연어 처리] Lab-2 추론 기반 기법 [내부링크]

https://github.com/rbdus0715/Natural-Language-Processing/blob/main/Lab-2%20Word2Vec.ipynb Natural-Language-Processing/Lab-2 Word2Vec.ipynb at main · rbdus0715/Natural-Language-Processing 파이썬을 활용한 자연어 처리 공부 저장소입니다. Contribute to rbdus0715/Natural-Language-Processing development by creating an account on GitHub. github.com 통계 기반 기법의 문제점 주변 단어의 빈도를 기반으로 단어를 표현 -> 데이터가 많아질수록 엄청난 크기의 행렬을 만들게 됨 -> SVD 적용하기 힘듦 통계 기반 기법에서는 단 1회만에 분산 표현을 얻기 때문에 압축적으로 엄청나게 많은 양을 한번에 계산해야함 이러한 단점들을 보완하기 위해 만들어진 것이 바로 추론 기반

딥러닝 딥하게 공부하기 [내부링크]

부트 캠프 관련 영상을 보면서 느낀 점이 있다. 나는 1학년이기도 하고 아직 부트 캠프를 해보지 못했지만, 그 주제에 대해 딥하게 공부하진 못할 것 같다고 생각하였다. 실무에 필요한 스킬만을 건지는 것 같았다. (물론 다 그런 것은 아니지만) 지금은 혼자서 기계학습을 공부하고 있는데, 실무에서 쓰이는 대략적인 개념이나 코드만 공부하지 말고 이론의 배경, 원리에 대해 더 딥하게 공부해야겠다고 생각했다. 1. 수학 1.1 선형 대수 딥러닝을 공부하면서 행렬을 많이 다루고, 특히 차원 축소에 대한 개념도 등장하면서 선형대수학 공부의 필요성을 크게 느꼈다. 수학적인 원리를 아는 것이 무엇보다 중요한 것 같다. https://www.youtube.com/playlist?list=PL9k2wIz8VsfMn-03Oe7Hmf1ZSTzvFDikk 1.2 확률과 통계 확통 관련 개념이 자주 등장하긴 하는데 너무 깊게 공부하지는 않아도 될 것 같다. http://www.kocw.net/home/sear

머신러닝을 공부하면서 든 생각 [내부링크]

이 분야를 공부하는 과정에서 정말 무궁무진한 가능성이 있는 분야라른 점을 느끼며 더욱 빠지게 되었다. 혼자 공부하는 만큼 누구에게 물어볼 수도 없어서 궁금한 점도 많이 쌓이기도 했고, 나중에 돌아봤을 때 얼마만큼 더 성장했는지 확인하고 싶기도 해서 공부하면서 든 생각들을 정리하게 되었다. 너무 두서 없고 다양하고 사소한 이야기들이지만 .. + 물음표 폭탄 주의 + 의식의 흐름 주의 + tmi : 중간고사 끝나고 머신러닝과 관련 있는 연구실에 들어가거나 교수님과 상담을 해볼 예정! 논문에 나와있는 레이어 설계도를 보면서 - 왜 굳이 저렇게 설계했을까? 딥러닝을 공부하고 AlexNet 논문을 읽으면서 든 생각이다. 솔직히 논문에 불만이 조금 있었던 것 같다. 왜 저렇게 설계했는지는 잘 알려주지 않은 것 같다. 굳이 저렇게 설계해야만 했을까? conv layer를 한 칸 뒤로 한다면, 혹은 하나를 더 붙인다면? 이러한 변화가 모델 성능에 미치는 영향은 무엇일까? "learning rate

[논문 읽기] You Only Look Once: Unified, Real-Time Object Detection [내부링크]

https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Redmon_You_Only_Look_CVPR_2016_paper.pdf 욜로 알고리즘 소개 줄여서 Yolo라고 부르는 이 객체 탐지 알고리즘은 이미지 전체에 대해서 한 번의 계산만으로 객체의 위치와 클래스의 확률을 예측합니다. 객체를 탐지하기 위한 알고리즘 중에서 다른 알고리즘으로 다음 두 가지 알고리즘이 있습니다. deformable parts models(DPM) - sliding window R-CNN sliding window위 단점(왼쪽) | R-CNN의 작동방식(오른쪽) 먼저 sliding window를 사용한 DPM 알고리즘입니다. 이 알고리즘은 고정된 사이즈의 window를 움직이며 객체가 그 안에 있는지 확인하는 알고리즘입니다. 왼쪽 사진) 하지만 이 방식은 그 윈도우가 객체를 잘 포함하지 않는 상황이 발생할 수 있습니다. 그렇다고 해서 윈도우 사이

[논문 구현] yolo 논문 / non max suppression python 구현 [내부링크]

**구현 방법 미리 보기** 1. 정해놓은 threshold 이하의 confidence score 값을 가진 바운딩 박스는 모두 제거한다. 2. 남은 바운딩 박스들을 confidence score에 따라 내림차순으로 정렬한다. 3. 맨 앞에서부터(가장 score 값이 높은 것부터) 바운딩 박스를 하나 잡고 순차적으로 이 박스와 Iou 값이 특정 threshold를 넘는 박스를 모두 제거한다. O(n^2) non max suppression이란 객체 탐지를 할 떄 object 주변에서 여러 바운딩 박스를 만드는 문제점이 있습니다. 이 중 하나의 박스를 선택하는 알고리즘이 non max suppression 입니다. 다시 말해 정확한 bounding 박스를 선택하는 기법입니다. pseudocode와 설명 알고리즘 수도코드는 이렇게 생기긴 했는데 아직은 잘 이해 못하겠으니 말로 더 풀어서 설명하겠습니다. 1. 정해놓은 threshold 이하의 confidence score 값을 가진 바운

[논문 구현] yolo 논문 / mean average precision 구현 [내부링크]

[순서] 논문에 등장한 mAP 정밀도와 재현율 precision-recall 곡선 mean average precision 구현 with python 예시 더 읽어볼만한 글 논문에 등장한 mAP 논문에 꽤 많이 나왔고, 욜로 [논문 리뷰] 글에도 이 단어가 나왔는데 잘 알지 못해서 그냥 넘어갔습니다. 위의 내용에서 보면 mAP가 성능을 평가하는 어떠한 지표로 사용되는 것 같았습니다. 그래서 검색을 해봤더니 이것이 정밀도, 재현율과 관련이 있었습니다. 그래서 AP에 대해 공부하기 전에 정밀도와 재현율에 대해서 공부해봅시다. mAP는 각 객체에 대한 AP의 값의 평균입니다. 정밀도와 재현율 우리는 모델을 통해서 예측을 합니다. yolo에서는 class와 바운딩 박스의 좌표를 예측했죠. 이 모델이 잘 예측 했는가는 어떻게 알 수 있을까요? 바로 모델을 실제 정답과 비교하여 평가하는 것입니다. 위의 표를 봅시다. row(행)는 실제 정답을 의미하고, column(열)은 에측값을 의미합니다.

미스터최 파스타 | 방배 [내부링크]

맛️️️️️ 사장님 ️️️️️ 가격 ️️️️️ 너무 맜있다 친구하고 같이 가봤는데 너무 좋아서 여자친구하고도 많이 갔다 자리가 많이 없는게 장점이자 단점 가격 : 피자 7000원 파스타 6000원

통계학 기본 (기초 용어 정리) [내부링크]

**파이썬으로 배우는 통계학 교과서를 참고하였습니다** *용어정리* (1) 통계학 기술통계 : 가지고 있는 데이터를 정리 요약하기 위해 사용되는 통계학 추측통계 : 미지의 데이터를 추측할 목적으로 사용되는 통계학 -> 표본이라는 일부를 이용해 모집단이라는 전체를 분석하는 것 표본 : 현재 가지고 있는 데이터 모집단 : 아직 가지고 있지 않은 모르는 데이터를 포함한 데이터 (2) 표본을 얻는 과정 확률 변수 : 확률의 법칙에 따라 변화하는 값 실현값 : 확률변수의 구체적인 값 샘플링, 표본 추출 : 모집단에서 표본을 얻는 것 단순 랜덤 샘플링 : 모집단에서 하나하나 요소를 무작위로 선택하는 방법 샘플 사이즈 : 표본의 크기나 가지고 있는 데이터의 수 전수조사 : 모집단 전체를 조사 표본조사 : 모집단의 일부만 조사 (3) 표본을 얻는 과정의 추상화 확률분포(분포) : 확률변수와 그 값이 나올 수 있는 확률을 대응시켜 표시 확률분포를 따름 : 어떤 데이터가 어떤 확률분포에 대응할 때 모

AI 경진대회 참가 후기 (절망편) [내부링크]

대회 신청 1학기에 동아리에서 머신러닝을 공부하고 여름방학 때 딥러닝을 공부했더니 먼가 모르는 자신감이 생겼었나.. ai 경진대회를 나가게 되었다. 대회 나갈까 말까 계속 미루다가 결국 대회 시작 1주일 전에 신청했고 결론적으로는 아쉬운 것들 투성이인 대회가 되었다. 파티원을 찾아서 떠났지만 학교에 아는 사람이 있어야지.. 이쪽 분야에 그래도 관심이 있는 사람을 찾는 것이 쉽지가 않았다. 우여곡절 끝에 팀을 모았고, 마감 몇 시간 전에 신청했다. 휴.. ai 경진대회같은거 검색해보면서 어떻게 이루어질지 감좀 잡으려고 했는데 다들 입상글밖에 없어서 내가 원하는 내용을 얻진 못했다. 그래서 이 글이 ai 경진대회를 준비하는 사람들에게 조금이나마 도움이 됐으면 한다. *글이 조금 정돈 되지 않을 수 있음 주의* (제목에서도 확인했다시피 절망편으로, 모델이 예측이 원하는대로 잘 풀리지 않음..) c 대회 시작 전 대회 시작 전에는 문제에 대한 대략적인 설명이 나온다. 우리가 푼 문제는 건

long-term dependency [내부링크]

RNN에서 "I love you"를 번역할 때, 'you'를 담고있는 hidden state에는 비교적 'I'의 정보가 적을 수밖에 없습니다. 만약 이보다 긴 문장이 주어진다면 앞의 단어를 반영하기 더 어려워지겠죠. 이것을 long-term dependency라고 부릅니다. 그렇다면 이런 문제를 어떻게 해결할 수 있을까요? 이번 글에서는 두 가지 해결책을 제시합니다. bi-directional RNNs Transformer bi-directional RNNs 그렇다면 이런 아이디어를 떠올릴 수 있습니다. 타임스텝이 가면 갈수록 앞의 단어의 정보를 유실할 가능성이 크니깐 반대의 경로, 즉 backward path를 추가해 이 둘을 concate함으로써 단일 RNN보다 더 멀리있는 정보도 잘 반영하게 할 수 있습니다. Transformer - self attention RNN처럼 각각의 타임스텝에서 입력에 대한 인코딩 hidden 벡터를 만드는 것은 동일합니다. 하지만 RNN처럼 이 과

Scaled dot-product Attention [내부링크]

이번 글에서는 내적 기반 어텐션을 수행하는 방법을 계산하는 방법과, 그 값을 보정하는 scaled dot-product 어텐션에 대해 알아보겠습니다. attention key들의 행렬인 K와 value들의 행렬인 V, 해당 스텝에서의 쿼리인 q를 입력으로 받아 어텐션을 계산하는 과정을 수식으로 표현하면 아래와 같습니다. 정리하면 Q와 K의 내적을 소프트맥스한 값과 V를 가중평균하는 것입니다. 이 수식을 단일 쿼리 q가 아닌 다수의 쿼리 V 행렬로 확장하면 다음과 같이 나타낼 수 있습니다. σ는 softmax 함수이고 row-wise 소프트맥스 연산을 수행합니다. 이때 쿼리와 키는 서로 행렬곱을 하기 때문에 임베딩 차원 크기는 d_k로 같아야합니다. 하지만 value의 임베딩 차원 크기는 달라도 됩니다. 왜 그럴까요? 이전 글의 self-attention 모듈을 떠올린다면 쉽게 알 수 있을 것입니다. 결과적으로 value의 임베딩 차원의 크기 d_v를 가지는 인코딩 히든 벡터가 나오게

multi-head attention [내부링크]

앞선 글들을 통해서 우리는 "I'm going to rest because I'm so tired"라는 문장처럼 'I'가 여러 번 나오더라도 각각 다른 단어들과의 유사도 관계를 구함으로써 다른 의미로 구분할 수 있게 해주는 어텐션 기법에 대해서 알아보았습니다. 트랜스포머는 이러한 어텐션을 병렬로 h번 쌓는 형태의 multi-head attention 구조를 이용합니다. 왜 이런 구조를 사용할까요? multi-head attention 하나의 어텐션으로만 학습한다면 단어 사이의 관계를 하나의 방식으로밖에 설명하지 못할 것입니다. 이를 해결하기 위해 서로 다른 측면의 정보를 가져오는 여러 개의 어텐션 구조를 병렬로 쌓은 구조를 사용하는 것이죠. 멀티헤드 어텐션의 구조를 나타낸 그림을 확인해봅시다. 각각의 self-attention을 수행하고 이를 concat한 후 선형변환을 해줌으로써 계산합니다. 이를 간단하게 수식으로 표현하면 다음과 같습니다. 위와 같이 Attention 연산을 여러

gradient problem in RNN [내부링크]

RNN을 통해 학습을 시킬 때 시퀀스가 엄청나게 길어질 경우 기울기가 소실되거나 매우 커져버리는 문제가 발생할 수 있습니다. 어디에서 문제가 생기는지 확인해봅시다. 출처: Denny's Blog 위의 상황은 RNN의 E3에서 결과값이 loss funtion의 미분으로 인해 gradient가 역전파가 s0까지 전달되는 과정을 나타낸 것입니다. s3에 대한 s0의 편미분을 계산해보면 chain rule에 의해서 그 사이의 편미분 값들을 전부 계산하여 곱한 값이 됩니다. 한편, RNN의 수식은 다시 정리하면, 이전 셀의 hidden state와 현재 타임 스텝(t)의 입력벡터의 선형결합으로 나온 결과를 tanh라는 비선형 함수를 통과시켜 나온 결과값입니다. 예시에서는 행렬들을 하나의 스칼라로 취급하여 각각 2와 3으로 간단한 형태를 가지도록 했습니다. 수식에서는 위의 그래프와 같이 hidden을 뜻하는 h 대신에 s를 사용했습니다. 또한 수식이 길어지므로 s3에서 s1까지 전달되는 과정으

LSTM & GRU [내부링크]

Long Short-Term Memory (LSTM) 이전 글에서 다뤘던 기울기 문제를 해결하고 더 긴 시퀀스에서도 필요한 정보를 보다 효과적으로 처리할 수 있도록 한 모델입니다. 기본적으로 RNN에서 사용하던 수식을 살펴보면 입력 벡터와 hidden state 말고도 다른 인자가 추가된 것을 확인할 수 있습니다. 뒤에서 설명하겠지만 c가 hidden state보다 완전한 정보를 저장하고 전달하는 역할을 하고, h는 그것을 가함으로써 현재 타임스텝의 출력이나 혹은 그 다음 레이어의 입력으로 사용하는 특징이 있습니다. 또한 '게이트'라는 개념을 사용하여 RNN보다 복잡한 구조이지만 정보를 보다 잘 기억할 수 있도록 하였습니다. 총 4개의 게이트로 I(inputgate), F(forget gate), O(output gate), G(gate gate)가 있습니다. 각각의 게이트 연산은 밑의 그림 하나로 정리할 수 있습니다. 우선 입력으로 들어온 x와 h를 선형변환하여 W라는 벡터를 만들

Seq2Seq [내부링크]

RNN의 다양한 구조 중 다대다 (many to many) 구조에 해당하는 모델로, 구조를 살펴보면 인코더와 압축벡터, 디코더로 구성되어있습니다. 인코더를 거치고 나서 나온 hidden state가 디코더의 입력으로 주어지는 hidden state로서의 역할을 하는데, 이것이 곧 인코더에서 수집한 정보를 고정된 벡터로 잘 담아두었다가 디코더에서 그 벡터를 사용해 문장을 생성하는 것으로 볼 수 있죠. 또한 어떤 문장에서 "시작"을 알려주는 start 토큰(Start of Sentence)과 "끝"임을 알려주는 end 토큰 (End of Sentence)를 사전에 정의해두어 디코더의 입력으로는 <SoS>를, 출력에는 <EoS>가 나오게 함으로써 디코더의 문장 생성에 제한을 걸어둡니다. 인코더와 디코더는 하나의 타임스텝에서의 GRU셀 구조처럼 구현했습니다. # declare simple encoder class Encoder(nn.Module): def __init__(self, inpu

Seq2Seq model with attention [내부링크]

이번 글에서는 seq2seq 구조에 어텐션 알고리즘을 적용한 모델에 대해서 알아봅시다. 기존 seq2seq와 달라지는 점은 무엇일까요? seq2seq는 모든 타임 스텝을 거친 hidden state만을 hidden vector로 사용하여 다음 디코더의 입력으로 넣어주는 방식을 사용했는데요. 어텐션에서는 각각의 타임 스텝에서의 hidden state vector까지도 디코더에 제공해줍니다. 이때 그냥 넘겨 주는 것이 아니라 그 중에서도 필요한 인코딩 hidden state 벡터를 선별하여 가져오는 방식을 사용하였습니다. 디코더의 첫 번째 타임스텝에서는 입력으로 seq2seq와 동일하게 t에서의 입력 벡터와 인코더의 마지막 hidden state를 입력으로 가져옵니다. 이후 디코더의 hidden state 벡터가 인코더의 hidden state 벡터들 각각과 스칼라곱을 한 결과를 소프트맥스를 통과시켜 어떤 인코더 hidden state 벡터의 정보를 더 참고할 것인지를 계산합니다. 여기

attention mechanism [내부링크]

이번 글에서는 attention score를 구하는 다양한 방법들에 대해서 알아보겠습니다. 총 3가지의 메커니즘을 다룰 것입니다. 하나는 이전 글에서도 사용했던 dot product이며 가장 기본적인 방법일 것입니다. 두 번째는 그 dot product를 조금 더 일반화한 방법입니다. 마지막은 두 hidden 벡터를 concatenation하여 구하는 방법입니다. 자세한 내용은 아래에서 다루겠습니다. dot product 이전 글에서 확인했듯이 어텐션 스코어를 구하는 가장 기본적인 방법입니다. 잠깐 다시 복습하자면 디코더의 h 벡터를 인코더의 h 벡터들과 스칼라곱을 하여 어텐션 스코어를 구하는 방식이었죠. general 다음은 general한 dot product를 사용하는 방법입니다. dot product의 일반적인 표현은 다음과 같습니다. 두 벡터를 스칼라곱하는 과정 사이에 항등행렬 I를 사이에 곱하는 것입니다. 직접 계산해봐도 결과는 같습니다. 만약 가운데에 있는 행렬의 원소

다음 단어를 생성하는 방법 [내부링크]

이번에는 어텐션 seq2seq가 테스트 타임에서 다음 단어를 예측해낼 때 사용할 수 있는 기법들이 어떤 것들이 있는지 살펴보겠습니다. Greedy decoding 단어를 예측하는그때 그때마다 시점에서 가장 스코어가 높은 것을 생성하는 알고리즘입니다. 알고리즘을 공부해보셨던 분들이라면 그리디 알고리즘은 최적회가 아니라는 것을 알 것입니다. 비록 그때 그 상황에서만의 최고 좋은 값을 선택했지만 전체적으로 봤을 때는 어울리지 않는 문장이 생성될 수도 있습니다. "안녕하세요 저는 자연어처리를 공부하고 있습니다."를 영어로 번역하는 것을 예로 들어보겠습니다. 이 문장의 정상적인 번역 문장은 "hello I'm studing natural language processing"입니다. 만약 그리디 디코딩을 사용했을 때 한 단어라도 예측을 잘못하면 어떻게 될까요? 1. hello __ 2. hello I __ 3. hello I'm __ 4. hello I'm a __ 그 다음부터는 이상한 문장이

모델 평가하기 [내부링크]

이전 글에서는 모델이 결과를 생성해내는 3가지 방법에 대해 배워봤다면, 이번 글에서는 생성한 글을 어떻게 평가할 것인지에 대해 알아보겠습니다. 다른 머신러닝 학습의 평가 과정과는 달리 자연어 생성에서의 평가 방식은 조금 더 주의를 요하는데요. 그 이유는 무엇일까요? 생성한 문장과 각 자리에서 기대되는 ground truth값들의 차이를 목적함수로 두는 평가 방식을 취했다고 가정해봅시다. 이때 가령 "I love you"라는 문장을 생성해야 하는데 "oh I love you"를 생성한 경우, 첫 단어를 잘못 생성했다는 이유만으로 단어가 한 칸씩 밀리게 되어 모든 자리에서 정답과 일치하지 않게 되어 점수가 0이 나올 것입니다. 문장의 전체적인 의미는 같은데 말이죠. 이러한 문제를 해결하기 위해 어떻게 할 수 있을까요? Precision and Recall 정밀도와 재현율에 대해서는 이 글을 통해 확인할 수 있습니다. 정밀도와 재현율을 평가 지표로 사용하여 평가해봅시다. 정밀도 : 맞은

인공지능융합세미나[2회차] - AI 스타트업 창업101: 데이터부터 서비스까지 [내부링크]

3월 12일에 열린 세미나에서는 art-lab의 엄태웅 대표님께서 AI 스타트업 창업을 주제로 여러 유익한 이야기를 해주셨습니다. 저의 목표 중 하나가 바로 스타트업이어서 너무 듣고 싶었던 강의였습니다. 이번 세미나에서는 art-lab 초기에 데이터를 모으는 과정부터 서비스를 만들어내는 과정까지의 발전사를 엿볼 수 있었습니다. Skin Log 엄태웅 대표님은 AI 스타트업을 운영하면서 딥러닝의 근본적인 발전보다는, ai로 문제를 해결함으로써 가치를 창출하는데 초점을 두셨습니다.. 큰 기업들과의 딥러닝 모델 자본 싸움보다는 사람들이 필요로 하는 수요를 찾아 우물을 판 것이죠. 하지만 처음부터 원할하지는 않았다고 합니다. art-lab 초기에는 사람들의 피부 상태를 기록하는 스킨로그 앱을 만들었습니다. 많은 사람들이 핸드폰 셀카를 통해 피부를 기록하곤 하는데 갤러리에 이런 사진이 많으면 보기 싫어진다는 문제점을 해결해주는 좋은 앱이었죠. 더불어 많은 사람들의 피부 데이터를 수집할 수 있

LaTeX tutorial [내부링크]

[목차] 1. 그리스 문자 2. 폰트 3. 첨자 4. 괄호 5. 화살표 기호 6. 부등호 기호 7. 관계 기호 8. 집합 기호 9. 기타 기호 10. theorem, proof 작성법 1. 그리스 문자 α \alpha β \beta γ \gamma δ \delta ϵ \epsilon ζ \zeta η \eta θ \theta ι \iota κ \kappa λ \lambda μ \mu ν \nu ξ \xi o o (omicron) π \pi ρ \rho σ \sigma τ \tau υ \upsilon ϕ \phi χ \chi ψ \psi ω \omega ε \varepsilon ϑ \vartheta ϰ \varkappa ϖ \varpi ϱ \varrho φ \varphi ς \varsigma A A (Alpha) B B (Beta) Γ \Gamma Δ \Delta E E (Epsilon) Z Z (Zeta) H H (Eta) Θ \Theta I I (Iota) K K (Kappa)

[선형대수학] 벡터공간 theorems [내부링크]

첨부파일 1.vector_spaces.pdf 파일 다운로드

VOC2007 Dataset 구조 완전 정리 [내부링크]

PASCAL Visual Object Classes Challenge 2007 dataset guidelines [VOC2007] VOC2007 |-- Annotations |-- ImageSets |-- JPEGImages |-- SegmentationClass |-- SegmentationObject [Annotations] VOC2007/Annotations |-- 000005.xml |-- 000007.xml ... [ImageSets] ImageSets |-- Layout |-- Main |-- Segmentation (1) ImageSets/Layout Layout |-- train.txt // train을 위한 데이터셋, 내부: 000012 000026 ... |-- val.txt // validation을 위한 데이터셋 |-- trainval.txt // train + val 데이터셋 (2) ImageSets/Main Main // 이미지가 파일명 클래스에 해당한다면

자연어 처리 기법 [내부링크]

자연어 처리란! 컴퓨터가 인간의 언어를 이해하고 그것을 토대로 다양한 일을 수행할 수 있도록 하는 AI의 한 분야입니다. 최근 들어 딥러닝을 기반으로한 다양한 모델들이 인터넷에 존재하는 대규모의 데이터를 학습하여 엄청난 성능을 보여주고 있죠. 이러한 모델들을 이해하기 이전에 앞서 전통적인 자연어 처리 기법에 대해서 알아봅시다. Bag-of-Words "bag-of-words" 말 그대로 단어 가방을 의미합니다. 어쨌든 우리는 이 언어라는 것을 컴퓨터로 다루기 위해서는 컴퓨터에게 익숙한 숫자로 변환해야할 필요가 있습니다. 그것을 짧은 단어로 인코딩이라고 하는데, 그렇게 되면 긴 문장도 짧은 문자열로 압축이 가능합니다. step 1) 주어진 문장들에 대한 단어 집합인 '사전'을 만든다. step 2) 이러한 단어들을 원-핫 벡터로 인코딩한다. 아래 예시는 단어가 4개일 때의 원-핫 벡터이다. 각각의 벡터는 4차원 공간상의 기저로볼 수 있다. 이때 각각의 모든 단어 쌍은 거리가 루트 2이

Isolation Forest [내부링크]

논문 링크 review 이상치 탐지(Anomaly Detection)는 학습 데이터 셋에 포함된 정상적인 샘플과 비정상 적인 이상치를 구별해내는 태스크입니다. 즉 정상인지 비정상인지 구분하는 이진 분류라고도 볼 수 있죠. 이러한 이상 탐지는 다양한 산업 분야에서 사용될 수 있는데 예를 들어 장비 오작동을 식별하거나 비정상적인 네트워크 활동을 감지, 비정상적인 환자 상태를 식별하는 등으로 사용될 수 있습니다. 그렇다면 이 논문에서는 어떤 아이디어를 이용하여 이상치를 탐지하였을지 살펴봅시다. 이 논문에서는 해당 샘플을 고립시키기 위해서 몇 번이나 데이터를 나눠야 하는지(split)를 이상치로 판단하는 기준으로 하였습니다. 이 논문에서는 나누는 횟수를 분리 횟수(path length)로 정의하였습니다. 아래 그림을 봅시다. x_i 데이터는 정상 샘플로, 사각형 안에 해당 샘플 혼자만 들어가도록 하기 위해서는 꽤 많은 분할이 필요합니다. 반면 x_0 샘플은 정상 샘플보다 더 적은 횟수의

word embedding [내부링크]

한마디로 단어를 벡터로 표현하는 것을 의미합니다. 예를 들어 cat이라는 단어를 3차원 공간상의 벡터 (1, 3, 5)로 놓는 것입니다. 이때 아무 벡터로나 막 표현하는 것이 아닙니다. cat과 kitty는 의미적으로 비슷하므로 두 단어를 벡터로 표현했을 때 두 벡터의 거리가 짧아야 하며, car이라는 단어가 들어왔을 때 의미적으로 먼 단어이므로 벡터로 표현했을 때는 그 두 단어와 거리가 먼 벡터로 설정해야합니다. 이 글에서는 대표적인 word embedding 방법인 Word2Vec과 GloVe를 다룰 예정입니다. Word2Vec 워드 임베딩을 수행하는 대표적 알고리즘 중 하나로, 이 알고리즘의 주 아이디어는 다음과 같습니다. "문장 안에서 비슷한 위치에 위치한 단어는 유사한 의미를 가질 것이다." 즉 의미가 유사한 두 단어를 벡터로 표현했을 때 코사인 유사도가 커지도록 모델을 학습해야합니다. step 1) 우선 모든 문장에서 등장한 단어들을 가지고 사전을 만든다. {"i", "s

RNN [내부링크]

RNN은 입려과 출력을 시간 순으로 처리하는 시퀀스 모델입니다. 단순한 딥러닝 모델처럼 입력과 출력 쌍이 딱 하나 있는 것이 아니라, 우리가 사용하는 말과 같이 시간에 따른 어떠한 값으로 표현할 수 있는 일종의 시퀀스 단위로 처리하기 위한 인공 신경망입니다. RNN의 R은 Recurrent를 뜻하며 그것이 곧 RNN의 작동원리라고 할 수 있습니다. 실제로 우리가 사람과 대화를 하면서 다음에 나올 말이 무엇일지 예측하기 위해서는 이전의 대화들을 기억하고 있어야 합니다. 그렇지 않으면 우리는 상대의 질문에 대한 답만 하는 단순한 리액션 봇이 되어버릴 것입니다. 하지만 사람은 로봇이 아닙니다. 지금까지의 대화를 다시 생각하고 그것에 대한 답변 혹은 질문을 생각할 수 있죠. "이전 대화를 기억하는 것"은 RNN의 신경망과 비슷합니다. 입력은 시간에 따라서 계속해서 들어옵니다. 그리고 그 다음 입력에서도 이전 셀의 값을 가져옵니다. 이것이 신경망이 이전 대화를 기억하는 법입니다. 이를 조금

character-level language model [내부링크]

'언어 모델'은 언어의 특성을 잘 학습하여 어떠한 입력이 들어왔을 때 그에 맞는 적절한 값을 출력할 수 있는 모델입니다. 우리가 흔히 사용하는 chat gpt도 모두 언어 모델입니다. 이번 글에서는 문자 단위의 언어 모델를 다룰것입니다. 가령 hello라는 단어가 있을 때, h 다음에 e가 오고 그 다음에는 l이 오는 것을 예측하는 것이죠. 문자 단위 모델 문자 단위로 작동하는 언어 모델을 만들기 위해 저번 글에서 배웠던 RNN을 사용해볼 것입니다. RNN은 저번 글 처럼 매 time step에서의 y 결과값을 모두 사용할 수도 있고, 가장 마지막 부분만을 사용할 수도 있습니다. 또한 입력이 첫번째 step에만 있을수도 있고, 모든 step에 입력이 있을수도 있죠. 이걸 쉽게 다대다, 다대일 등으로 부릅니다. 문자 레벨 언어모델은 다대다의 경우입니다. train 단계에서는 모든 time step마다 결과값으로 다음 글자를 출력하도록 학습시킵니다. 이후 각각의 결과값들을 소프트맥스 연

[cloning] sticker.js [내부링크]

[내 공부 링크] https://github.com/rbdus0715/Creative-work/tree/main/stickerjs_copy {"payload":{"allShortcutsEnabled":false,"path":"stickerjs_copy","repo":{"id":664146452,"defaultBranch":"main","name":"Creative-work","ownerLogin":"rbdus0715","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-07-09T03:37:39.000Z","ownerAvatar":"https://avatars.githubusercont... github.com [원본 링크] https://github.com/cmiscm/stickerjs/tree/master GitHub - cmiscm/stickerjs Contribute to cmiscm/stic

8월 계획 [내부링크]

[kaggle의 달 - 큰 목표] 캐글 expert 등급 달성하기 기간 내용 상세 완료 08.01~05 휴가 ... ... 08.06~12 pandas, numpy 철저 분석 github에 정리 8/6 08.13~19 머신러닝 공부 & 캐글 분석 파이썬 머신러닝 완벽 가이드 캐글 코드 transcription을 통해 흐름 파악하기 이론 부분 1회독 08.20~26 본격적인 캐글 공부 하루에 한 대회 코드를 집중적으로 분석, 여러 사람들의 코드를 비교 머신러닝 대회 1회 참가 08.27~31 대회 참가 2회밖에 못함 [8월에도 꾸준히 운동하자!] 친구 따라서 헬스장 가끔 다시 딥러닝을 공부하고 싶어질 때가 있지만 그래도 먼저 기초 머신러닝 알고리즘 지식을 잘 쌓자! https://github.com/rbdus0715/Machine-Learning/blob/main/study/sklearn/sklearn.md {"payload":{"allShortcutsEnabled":false,"fi

steal the show - 엘리멘탈 OST [내부링크]

https://www.youtube.com/watch?v=DwuJeGYlYyw 돌아오는 표 없이 출발했어 다음 목적지를 난 항상 알았지 널 만난 후로 알게 된거야 내가 이 모든 순간을 놓치며 살고 있었단 걸 네가 1이면 난 2가 될게 널 좋아하게 됐다고 말해도 될까 그러니 이게 진짜라면 내게 말해줘, 내 사랑 난 괜찮아 이 쇼의 주인공이 너라도 너와 나, 우린 함께니까 네가 하늘이면, 난 그 날씨가 될거야 이 세상 아름다운 것들, 태양과 내리는 비 여름밤, 이 완벽한 타이밍 내가 네 곁에 있으면, 항상 널 기다릴 거란 내 맘을 알거야 그러니 이게 진짜라면 내게 말해줘, 내 사랑 난 괜찮아 나 대신 빛나는게 너여도 이 모든게 사실이라면 내게 말해줘, 내 사랑 난 괜찮아 이 쇼의 주인공이 너라도 넌 밝게 빛나고 있어 마치 영원할 것처럼, 아니 영원해 반짝반짝 빛나는 너, 주인공은 너야 이 모든게 사실이라면 내게 말해줘, 내 사랑 난 괜찮아 이 쇼의 주인공이 너라도 이 모든게 사실이라면

국방 경진대회 모음 [내부링크]

https://maicon.kr/ 국방 AI 경진대회 ※ 본선 결과물 제출 후 발표평가 실시 ※ 대회 일정은 상황에 따라 변경될 수 있음 maicon.kr https://whitehatcontest.com/ 화이트햇 콘테스트 2023 대한민국의 안보를 위협하는 사이버 위협은 지속적으로 증가하고 있으며, 인공지능, 빅데이터 등 신기술의 발전으로 나날이 고도화 되고 있습니다. 화이트햇 콘테스트 는 民・官・軍 이 협력하여 사이버 위협에 맞서 대한민국을 수호할 인재를 양성하기 위해 2013년 최초 개최한 이래, 올해 11회째를 맞이한 국내 대표적인 해킹대회 입니다. 이번 대회문제는 웹 해킹, 시스템 해킹, 리버싱, 크립토 등 사이버안보에 대한 종합적인 분야를 포괄적으로 구성하였습니다. 향후 대한민국의 사이버안보에 핵심적인 역할을 수행할 참가자들의 많은 관심과 참여 부탁... whitehatcontest.com https://www.army-startup.co.kr/ 2023 제10회 대한민

U-Net [내부링크]

논문 읽기 U-Net: Convolutional Networks for Biomedical Image Segmentation [1] 도입 이미지 세그멘테이션은 이미지 감지 분야와는 달리 이미지 안의 사물을 "픽셀단위"로 이해한다. 왼쪽 사진이 이미지 감지, 오른쪽 사진이 이미지 세그멘테이션이다. 이 문제를 해결하는 방법으로, 슬라이딩 윈도우를 이용한 방법이 있었는데 [1] 이 논문에서는 FCN(완전 합성곱 네트워크)을 이용해 훨씬 쉽고 효율적으로 이 문제를 해결했다. 논문에서 찾아볼 수 있는 4가지 요소들 (1) 아래의 그림을 보면 일반적인 FCN과는 차이점이 있다. 바로 업샘플링이다. 단순한 선형 보간 X up-convolution 과 concatenation을 이용 (2) 또한 네트워크가 진행됨에 따라 이미지 사이즈가 작아지는데 이를 해결하기 위해 Overlap-tile strategy를 사용해 경계값을 미러링으로 보정해 손실을 막았다. (3) 한정적인 데이터 수 극복 data

Node & Express [내부링크]

1. Node.js (1) hello node.js 출력 예제 const http = require("http"); // http 객체 생성 let count = 0; // 노드 서버 객체 생성 (인자: 콜백함수) const server = http.createServer((req, res) => { log(count); res.statusCode = 200; // 요청에 대한 상태코드, 200은 성공을 의미 res.setHeader("Content-Type", "text/plain"); // 요청, 응답에 대한 부가 정보는 header에 설정 res.write("hello\n"); // 응답 // prettier-ignore setTimeout(() => { // 2초 후에 Node.js라는 응답을 주고 http 커넥션을 끝냄 res.end("Node.js"); }, 2000); }); function log(count) { console.log((count += 1)); } se

colab [내부링크]

colab으로 drive 불러오기 from google.colab import drive drive.mount('/content/drive') 2. gz압축파일 풀기 !tar -xzvf "경로" 3. zip 풀기 !unzip -qq "경로"

선형대수학 [내부링크]

[프리드버그 선형대수학 솔루션] (1) 4th의 모든 문제에 대한 솔루션 포함 *이 솔루션을 더 선호합니다. 솔루션 링크 (+2023년 버전 최신 솔루션 추가) 첨부파일 solution_2023.pdf 파일 다운로드 (2) 몇 가지 빠졌지만 하나당 세부적으로 들어가는 솔루션 솔루션 링크 (3) 증명 솔루션 *정리에 대한 증명이 책에 나오는 것만으로는 이해하기 어려울 때 읽으면 좋은 글입니다. 솔루션 링크 (4) 한국어판 5th 일부 문제에 대한 솔루션 솔루션 링크 (5) 5th 선택된 솔루션에 대한 해답 (파란 번호 문제) 솔루션 링크 [공부 현황] 1. 벡터공간 개론 [2/6] 벡터공간 [2/7] 부분공간 [2/8] 일차결합과 연립일차방정식 [2/9] 일차종속과 일차독립 [2/9] 기저와 차원 [2/10~2/11] 일차독립인 극대 부분집합* [skip] 2. 선형변환과 행렬 선형변환, 영공간, 상공간 [2/12~3/12] 선형변환의 행렬표현 [3/13~3/14] 선형변환

block chain 공부 노트 [5/6~5/13] [내부링크]

[읽어볼만한 재밌는 자료] 처음으로 거론된 블록체인의 개념 http://www.staroceans.org/e-book/Haber_Stornetta.pdf hash algorithm 논문 : on the secure hash algorithm family https://silo.tips/download/chapter-1-on-the-secure-hash-algorithm-family 블록체인 관련 기사 https://medium.com/cryptoeconomics-australia/the-blockchain-economy-a-beginners-guide-to-institutional-cryptoeconomics-64bf2f2beec4 탈 중앙화에 대한 글 : the meaning of decentralization https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274 비잔틴 내결함성 https:/

DApp(탈중앙화된 앱) 개발 공부 노트 [5/19~] [내부링크]

https://github.com/rbdus0715/decentralized-app GitHub - rbdus0715/decentralized-app Contribute to rbdus0715/decentralized-app development by creating an account on GitHub. github.com

G. Gershwin - i've got rhythm [내부링크]

https://www.youtube.com/watch?v=3fgxyyrqZ-I https://www.youtube.com/watch?v=Xt17_Pu6X2g 첨부파일 igotrhythm.pdf 파일 다운로드

G. Gershwin - summertime [내부링크]

https://www.youtube.com/watch?v=ixdJLXDT_QM https://www.youtube.com/watch?v=5HMBniu9Evg 첨부파일 summertime.pdf 파일 다운로드

Eddie Harris - Cold Duck Time [내부링크]

https://www.youtube.com/watch?v=l_lBtOaHz5U (2:17) https://www.youtube.com/watch?v=cejfQ1G-mdo 첨부파일 cold-duck-time.pdf 파일 다운로드

allman brothers band - stormy monday [내부링크]

https://www.youtube.com/watch?v=mFnfkLtFgSA They call it stormy Monday But Tuesday's just as bad They call it stormy Monday But Tuesday's just as bad Lord, and Wednesday's worse And Thursday's all so bad The eagle flies on Friday Saturday I go out to play The eagle flies on Friday Saturday I go out to play Sunday I go to church, yeah Gonna kneel down and pray Lord have mercy Lord have mercy on me Lord have mercy Lord have mercy on me Though I'm tryin' and tryin' to find my baby Won't somebody pl

thelonious monk - straight no chaser [내부링크]

https://www.youtube.com/watch?v=aASk-dcGCxg 첨부파일 Straight No Chaser_Bb instruments.pdf 파일 다운로드

알고리즘 공부 계획 (5월 말~6월) [내부링크]

https://github.com/rbdus0715/algorithm/tree/main GitHub - rbdus0715/algorithm Contribute to rbdus0715/algorithm development by creating an account on GitHub. github.com 전역 전까지 1000*n 문제를 목표로 열심히 해보자! 종만북 현황 완전 탐색(5/19~) 분할 정복(5/22~) 동적 계획법(5/26~) 동적 계획법 테크닉 (6/5~)

수치 해석 [내부링크]

수치 해석은 직접 계산하기 어려운 수학 문제를 근사적으로 푸는 알고리즘을 연구하는 전산학 분야이다. 수치 해석 분야는 대회에서는 비교적 자주 나오지는 않지만 기초적인 알고리즘을 알아두면 좋을 것 같다. 이분법 #include <iostream> #include <cmath> using namespace std; double f(double x) { return x*x-9; } double bisection(double lo, double hi) { // 함수가 구간에서 증가하든 감소하든 반복문 불변식 유지 if(f(lo)>0) swap(lo, hi); while(fabs(hi-lo)>2e-7) { double mid = (lo+hi)/2; double fmid = f(mid); if(fmid <= 0) lo = mid; else hi = mid; } return (lo+hi)/2; } int main() { cout << bisection(0, 9); } 2. 삼분검색 #includ

Shaun Martin - Yellow Jacket [내부링크]

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

python - firebase realtime database 연동 [내부링크]

군대에서 개발하기 참 쉽지 않다. 프로그램을 깔 수 없어서 온라인 db로 대체했다. 바로 firebase에 있는 realtime database이다. 이거라도 있어서 정말 다행인 것 같다. 방법도 엄청 간단하다. firebase 무료 계정을 생성해서 realtime database를 하나 생성 프로젝트 설정 > 서비스 계정 > 새 비공개 키 생성 > .json 파일 다운 프로젝트 설정 > 일반 > databaseURL 확인 python 프로젝트에 json 파일 추가 연동 코드 from django.shortcuts import render from django.http import HttpResponse import firebase_admin from firebase_admin import credentials from firebase_admin import db cred = credentials.Certificate('다운받은 비공개 키 파일') firebase_admin.init

조금 더 현대적인 [내부링크]

조금 더 현대적인 개발을 하기 위해 다음과 같은 자료 참고하기 (js) MDN web docs https://developer.mozilla.org/ko/ GSAP https://greensock.com/gsap/ css 트랜지션과 애니메이션 샘플 코드와 프로젝트

부야스곱창 | 홍대 [내부링크]

첨으로 돈주고 곱창을 사먹은 날이다. 음식 나오기 전에 큐브 다 맞추면 메뉴중에 하나 서비스로 주신다길래!! 밑반찬 나오기 전에 다 맞췄다 근데 둘이서 먹기에는 양이 많을 것 같아서 그냥 볶음밥을 시켰다 냠냠 가격 ️️️️ 맛 ️️️️ 야채곱창, 알곱창 둘다 11000원 밑반찬이 조금 단조롭긴 했지만 볶음밥이 너무 맛있어..

c# 유니티 | Snow Boarder (1) [내부링크]

# 땅 : 자유자재로 변형시킬 수 있는 도형 # 물체가 땅을 타고 굴러갈 수 있도록 # 카메라 : 속도에 따라 다르게 촬영하는 카메라 # 땅 : 자유자재로 변형시킬 수 있는 도형 (1) 도형생성 : Hierarchy(우클릭) > 2d object > sprite shape > closed shape (2) 프로필 추가 : Asset > sprite > create > 2d > sprite profile (3) 도형에 sprite profile 추가하기 : add component > sprite shape controller > profile에 마우스로 드래그하여 추가 가장자리와 안쪽 부분은 아래 사진과 같이 디자인 할 수 있습니다. 가장자리 : Sprites 안쪽 : texture (4) 도형 자유자재로 변환하기 : edit spline (+) 세부 컨트롤 * offset : 가장자리에서 어떤 부분을 충돌 영역으로 할 것인지! 왼쪽 : 낮은 offset / 오른족 : 높은 offs

n!의 소인수분해 [내부링크]

n이 작은 수라면 충분히 손으로 구할 수 있다. 예를 들어 10! = 1*2*3*4*5*6*7*8*9*10이므로 1*2*3*(2*2)*5*(2*3)*7*(2*2*2)*(3*3)*(2*5) 이렇게 각각의 n들을 소인수분해한 것의 곱으로 표현할 수 있다. 정리하면 (2^8)*(3^4)*(5^2)*(7^1) 이렇게 나온다. 하지만 n이 100만 되더라도 일일이 구하는 것이 힘들어보인다. 특히 백준 문제에서 n의 범위가 10억까지도 주어지기 때문에 선형적으로 일일이 확인하기는 쉽지 않아 보인다. 1 2 3 4 5 6 7 8 9 10 2 3 2 5 2 7 2 3 2 2 3 2 3 5 2 10!에서 소인수분해를 하기 위해서는 결론적으로 10! = (2의 p승) * (3의 q승) * (5의 r승) * (7의 s승) 의 p, q, r, s만 구하면 된다. p만 구해봐도 나머지는 어떻게 구하는지 바로 알 수 있다. 1 2 3 4 5 6 7 8 9 10 합계 2 3 2 5 2 7 2 3 2 5 2 3

유클리드 호제법과 확장된 유클리드 호제법 [내부링크]

*이 글에서는 두 수의 최대공약수만 다룹니다.* 최대공약수 중학교 때 배우는 개념인 최대공약수는 인수분해를 통해 구할 수 있다. 하지만 큰 수, 예를 들어 5778, 543이 주어진다면 인수분해부터가 막막할 것이다. 이런 문제를 쉽게 해결하기 위한 알고리즘이 바로 유클리드 호제법이다. 호제법을 알기 전에 먼저 최대공약수란 무엇인지 더 자세히 알아보자! (넘어가도 되는 부분입니다.) "a와 b를 동시에 나누는 양의 정수 d가 있다. 이 때 d 처럼 a와 b를 동시에 나누는 모든 c 들은 d를 나눈다" 쉽게 말하면 "a와 b를 나누는 수들 중에 가장 큰 수 d가 최대공약수이고, 나머지 수들이 d를 나눈다" 라고 볼 수 있다. 정수론 책에서는 gcd의 존재성과 유일성까지 증명하지만 생략한다. 유클리드 호제법 먼저 정의는 다음과 같다. 즉 정수 a와 b의 최대공약수는 b와 a를 b로 나눈 나머지 r의 최대 공약수이다. 유클리드 호제법을 통해 큰 수인 a와 b를 계속해서 작은 수로 줄여나

모듈러 연산의 성질과, 아주 큰 두 수의 최대공약수 [내부링크]

(이 글을 읽고 1234567891011121314151617181920212223242526272829와 1221의 최대공약수를 계산해보세요) 모듈러 연산 모듈러 연산은 a를 b로 나누었을 때의 나머지 r을 구하는 연산으로 나머지 연산(mod)이라고 한다. 모듈러 연산의 성질은 다음과 같다. 이 성질 중에서 4번을 이용해서 밑의 아주 큰 두 수의 최대공약수 문제를 풀어보자. c 아주 큰 수의 나머지 연산 저번 글에서 큰 두 수의 최대공약수를 구하기 위해서 유클리드 호제법을 사용한다고 했다. 그런데 이번 글도 아주 큰 두 수의 최대공약수를 다룬다. 하지만 저번 글 과는 다르게 아주아주아주 큰 수이다. c++에서 종종 큰 수를 다룰 때 사용하는 자료형인 long long도 범위가 제한되어있다. 그렇기 때문에 long long이 담을 수 없는 수의 범위에 있는 수를 다루기 위해서 char 문자열을 사용할 것이다. but! char 문자열로는 자리올림이 있는 정수 계산을 구현하기 힘들다

mac m1 tensorflow gpu [내부링크]

맨날 맥 os 업그레이드에 겁먹어서 빅서에 머물렀었는데 드디어 마음먹고 몬테레이로 업그레이드 했다 그 다음 버전 벤츄라도 있는데 일단 그 전 버전부터! 업그레이드 하고 가장 먼저 한 일은 tensorflow gpu로 돌려보기 처음에는 그냥 구글에 치면 나오는 아무 글로 했었다 가상환경 만들고 맥 m1용 텐서플로 설치하고 그랬는데 막상 model.fit() 작동 시키니깐 오류가 떴다. https://developer.apple.com/forums/thread/721619 Tensorflow on M1 Macbook Pro, erro… | Apple Developer Forums 2022-12-10 11:18:19.941623: W tensorflow/tsl/platform/profile_utils/cpu_utils.cc:128] Failed to get CPU frequency: 0 Hz 2022-12-10 11:18:20.427283: I tensorflow/core/grappler

Chat-GyuPT 제작과정 [내부링크]

소개 드디어 Chat-GyuPT를 완성했습니다.. ㅎㅎ 최근에 chatGPT가 나온 것처럼 저도 한번 챗 규피티를 만들어 보았는데요. 제작기간은 대략 구상+딥러닝 공부 3주일, 코드 짜기 1주일 걸렸습니다. 만들면서 정말 힘든 일들이 많았는데 그래도 우여곡절 끝에 하나 완성시키니깐 기분은 엄청 좋네요. 처음 생각했던 구상과는 많이 동떨어진 모습이긴 하지만 이 버전이 더 맘에 들고 애착이 가는 것 같아요 (아래에 구버전 디자인도 있습니다!) 시행착오 #디자인초안 #딥러닝공부 처음 이 프로젝트를 하게 된 계기는 군대 가기 전에 뭐라도 해야겠다는 생각이었습니다. 그래서 여자친구와 운영하는 비밀카페에서 같이 해커톤을 열어 같이 으쌰으쌰하면서 각자의 결과물을 발표하기로 했습니다. 여기 보면 1월 24일입니다. 저희의 의지 부족 + 일본 여행 으로 해커톤 일정은 흐지부지해졌습니다 ㅜㅜ 그리고 2월에는 여자친구 면접과 코테가 있어서 바쁜 2월.. 지금 보니 개발 계획서에 음악 듣는 페이지도

K-mooc x Udemy | C# Unity 게임 개발자 2D (1) [내부링크]

K-mooc x Udemy kmooc에서 udemy 강의를 무료로 볼 수 있는 회원권을 주길래 예전부터 해보고 싶었던 게임 게발을 해봤다. 일단 강의 내용이 매우 알차고 계속해서 작은 과제같은 걸 내서 재밌게 들을 수 있는 강의인 것 같다!! c# 언어를 처음 써봤지만 c++을 먼저 공부했기도 했고 그렇게 어렵지 않게 가르쳐주셔서 잘 따라갈 수 있었다. c 설치 과정 일단 설치 과정에 조금 만만치 않았다. 강의에서는 그냥 unity hub하고 vscode (+ c# extention, unity code snippets)만 설치하면 된다고 하길래 했는데 코드 자동 완성이 되지도 않고, vscode에 에러 메시지도 뜨고 그랬다. https://noguen.oopy.io/unity/tool/2 여러 블로그를 많이 참고했는데 여기가 잘 정리되어있어서 좋았다. 언제나 초기 세팅이 가장 어렵다.. 내용 정리 지금까지 140강 중 22강 들었고 중간 결과물이다. <메서드> - transfo

K-mooc x Udemy | C# Unity 게임 개발자 2D (2) [내부링크]

너무 재밌다.. 큰일났다. 게임 개발 너무 재밌는 것 같다. 로직 짜는게 살짝 머리 아프긴 하지만 알고리즘 문제하고 비교하면 엄청 쉬운 편이어서 할만 했다. 아래 사진은 28강까지의 강의를 듣고 나서 만든 게임이다. 저번 글하고 다른 점이 별로 없어 보이긴 하지만 많은 기능들이 업데이트되었다. - if문을 통해서 배달 구현하기 - 물건을 주우면 destroy 함수를 통해서 없애기 - 물건을 주웠을 때, 물건을 내려놓았을 때 차 색깔 바뀌기 - 장애물에 부딪혔을 때 속도 감소 / 부스터에 닿았을 때 속도 증가 c 내용 정리 <if문을 통해서 배달 구현하기> 배달할 물건 "is Trigger"를 설정하여 트리거 역할을 할게 한다. tag -> add tag -> 태그이름 입력(여기서는 Package) -> save -> 배달할 물건 선택 -> tag -> 새로 만든 태그 이름 선택 자동차 스크립트에 OnTriggerEnter2D를 통해 트리거 인식 <물건을 주우면 destroy 함수를