분류 전체보기 476

파이토치의 구성요소

파이토치의 구성요소-torch : 메인 네임스페이스-torch.autograd : 자동 미분 기능 제공 라이브러리-torch.nn : 신경망 구축 데이터 구조 및 레이어-torch.multiprocessing : 병렬처리 기능 제공-torch.optim : SGD 중심 파라미터 최적화 알고리즘 제공-torch.utils : 유틸리티 기능 제공-torch.onnx : 서로 다른 프레임워크 간 모델 공유 Tensors데이터 표현을 위한 기본 구조로 텐서 사용텐서는 데이터를 담기 위한 컨테이너로서 일반적으로 수치형 데이터 저장넘파이의 ndarry 생각하면 됨GPU 사용 연산 가속 가능00 Tensor (Scalar) 1D Tensor(Vector) : Rank:1 Shape(3,) 2D Tensor(Matri..

딥러닝 연구의 초점

직관을 바탕으로 아이디어를 전개해야 한다. 사전 정보를 적절히 심어주는 것이 중요하다.  이를 통해 정보의 흐름을 원활하게 만들고 학습을 효율적으로 유도할 수 있다. 정보를 어떻게 엮을 것인가?CNN (Convolutional Neural Network): 위치가 가까운 픽셀들을 우선적으로 고려하고, 멀리 있는 정보는 정제하여 조합하는 방식으로 패턴을 학습한다.트랜스포머 (Transformer): 단어들 간의 관계 정보를 파악하여 번역과 같은 자연어 처리 작업을 수행한다. Skip Connection이란?불필요한 연산 과정을 생략하고, 중요한 정보만 바로 전달하는 구조를 의미한다. 수식적으로 표현하면, 입력값을 , 함수 를 적용한 결과를 라 할 때, 기존 네트워크에서는 형태로 연산이 이루어진다. 하지만..

RNN이 무엇인가? 그리고 Transformer로 대체된 이유

RNN 연속적인 데이터?자연어 처리를 할 때, 컴퓨터가 문자를 이해할 수 있도록 단어를 숫자로 변환해야 합니다. 나는 [100] 강사 [010] 입니다. [001]이러한 방식으로 단어를 숫자로 표현한 뒤, 신경망에 입력하게 됩니다. RNN의 개념RNN(Recurrent Neural Network)은 순차적인 데이터를 다룰 때 효과적인 신경망입니다. 핵심 개념은 이전 정보와 현재 정보를 연결하여 학습하는 것입니다.RNN은 순차적으로 데이터를 처리하며, 이전 시점의 정보를 현재 시점에 반영하는 구조를 가지고 있습니다."Recurrent"는 되풀이되는 특징을 의미합니다.입력 데이터(X1, X2, X3)를 순차적으로 처리하며, 이를 기반으로 최종 결과(H3)를 생성할 수 있습니다. RNN으로 얻는 효과순차적으로..

[알고리즘] 그룹액티비티1 설명 해석

1번int fun1(int n, int data[]){ int sum = 0; for (int i = 0; i 주어진 함수 fun1에서 반복문은 i가 0부터 시작하여 2씩 증가하면서 실행됩니다. 즉, i는 0, 2, 4, 6, ...과 같이 증가하며, 반복문이 실행되는 조건은 i  따라서, 반복문은 대략 n/2번 실행되므로, 시간 복잡도는 O(n)입니다. 2번int fun2(int m, int A[], int n, int B[], int C[]){ int i = 0, j = 0, k = 0; while (i B[j]) C[k++] = B[j], j++; else C[k++] = A[i], i++, j++; } while (i  첫 번째 while 루프A[] 와 B[]를 비교하여 작은 값을 배열..

[CNN]

논문이 어떻게 학습했는지 위주로 설명을 할 예정입니다.  MNIST 데이터의 분류CNN 구조 예시입력 이미지: 28x28 크기의 이미지입니다.첫 번째 Convolution 레이어:Padding = 1, Kernel = 3x3, Stride = 1ReLU 활성화 함수 사용출력 크기: 32 x 28 x 28패딩을 1로 주었기 때문에, 28x28 크기가 그대로 유지됩니다.32는 32개의 필터를 사용한 결과입니다.첫 번째 MaxPooling 레이어:Kernel = 2x2, Stride = 2출력 크기: 32 x 14 x 14풀링을 통해 이미지 크기가 절반으로 줄어듭니다. (28x28 -> 14x14)두 번째 Convolution 레이어:Padding = 1, Kernel = 3x3, Stride = 1출력 크기..

CNN motivation

Overfitting의 단점은 모델이 훈련 데이터에 너무 과도하게 적합되어, 새로운 데이터에 대한 일반화 능력이 떨어진다는 점입니다. 예를 들어, 배경에 점만 찍어놓고도 모델이 이를 "아니라고" 예측한다면, 이는 과도한 학습으로 인해 발생한 문제입니다. 딥러닝에서 중요한 것은 학습을 계속해서 높이는 것이 아니라, 중간 지점을 찾아 모델이 일반화될 수 있도록 하는 것입니다. CNN과 인간의 방식:인간이 이미지를 인식할 때 뇌의 일부만 활성화된다는 사실을 반영합니다.위치별 특징을 추출하여, 위치 정보를 유지한 채로 특징 패턴을 찾습니다.(누락된 부분이 있으니, 적절한 내용이 필요할 수 있습니다.) Fully Connected Layer에서는 이미지의 각 픽셀을 세세하게 분석해야 하므로, 모든 픽셀을 서로 연..

[알고리즘] 이진 검색과 정렬

이진검색배열에 데이터들이 오름차순으로 정렬되어 저장되어 있습니다.  이진검색은 사전 찾는 방법을 생각하시면 됩니다. int binarySearch(int n, char *data[], char *target){ int begin = 0, end = n - 1; while(begin시간복잡도는 O(log n)입니다.  탐색 범위가 1이하가 되는 순간 루프가 종료됩니다. 이를 수식으로 표현하면 n/2^k = 1입니다. 양변에 로그를 취하면 k = log n이 됩니다. 따라서 루프는 최대 log n 번 반복됩니다.  시간 복잡도 예제시간 복잡도예제O(1)상수 시간 연산 (예: 배열 인덱스 접근)O(log⁡n)이진 탐색, 반씩 줄어드는 반복문O(n)단일 루프 (예: 선형 탐색)O(nlog⁡n)퀵 정렬, 병합 정..

[알고리즘의 분석] 시간복잡도

알고리즘의 자원 사용량을 분석합니다. 여기서의 자원이란 실행 시간, 메모리, 저장장치, 통신 등이 있으며 실행시간의 분석에 대해서 다룹니다.   시간복잡도 실행시간은 실행환경에 따라 달라집니다. (하드웨어, 운영체제, 언어, 컴파일러 등) 실행 시간을 측정하는 대신 연산의 실행 횟수를 카운트합니다. 연산의 실행 횟수는 입력 데이터의 크기에 관한 함수로 표현하며 데이터의 크기가 같더라도 실제 데이터에 따라서 달라집니다.  - 최악의 경우 시간복잡도 - 평균의 시간복잡도  점근적 분석점근적 표기법 사용-데이터의 개수 n-> 무한대일때 수행시간이 증가하는 growth rate로 시간복잡도 표현하는 기법- Θ- 표기, O-표기 등을 사용 유일한 분석법도 아니고 가장 좋은 분석법도 아님-다만 가장 간단하며, 알고..

[알고리즘] maze

미로찾기문제지나갈 수 있는 통로(pathway) 그리고 벽(wall)이라고 하고 출구를 잡을 때, Recursive Thinking으로 생각할 수 있습니다. 현재 있는 위치에서 출구를 찾는다고 할 때 1) 현재 위치가 출구이거나 혹은2) 이웃한 셀들 중 하나에서 이미 가본 곳을 다시 지나지 않고 출구까지 가는 경로가 있거나boolean findPath(x, y){ if (x, y) is the exit return true; else for each neighbouring cell(x',y') of(x, y) do if (x',y') is a pathway cell if findPath(x',y') return true; return false;} int offset[4][2] = {..

[알고리즘] Recursion 2

문자열의 길이 계산if the string is empty return 0;else return 1 + the length of the string that expcludes the first character;수도 코드 형태로 적은 것입니다. 받은 문자열에서 첫글자를 뗀 나머지 분자열을 받는 것입니다.  int length(char *str){ if (*str == '\0') return 0; else return 1 + length(str + 1);} 문자열의 프린트void printChars(char *str){ if (*str == '\0') return; else { printf("%c", *str); printChars(str + 1); }} 문자열을 뒤집어 프린트void ..