본문 바로가기

전체 글640

8.3 Stack organization Stack은 메모리 접근을 편리하게 하기 위한 하나의 방식이다.  Stack에 대한 기본적인 설명 Stack의 PUSH(쓰기)와 POP(읽기)   [PUSH]   [POP]   주소를 참조하는 것들PC명령어의 주소를 저장 AR피연산자의 주소를 저장 SPStack을 접근하고자하는 메모리의 주소  RPN (Reverse Polish Notation)RPN이라는건 연산자(+, -, *, / 등)를 피연산자(숫자나 변수) 뒤에 쓰는 후위 표기법이다.  이 방식은 Stack을 활용하여 수식을 계산하는 데 매우 적합하다.   왜 RPN을 사용하는가?일반적인 연산과는 다르게 우선순위를 고려할 필요없다. 즉, ()가 필요없다.따라서, 연산자 순서가 정해져있기 때문에 스택을 이용해 계산 과정을 쉽게 구현할 수 있다. 표.. 2024. 11. 17.
8.2 General register organization 공용 ALU와 레지스터 세트 Register selection과 ALU Operations     레지스터 연산 예시 2024. 11. 17.
8.1 Introduction(생략) 해당 부분은 5장과 7장에 대한 간단한 요약 설명이므로 생략 2024. 11. 17.
[기본 용어 설명] Latent Space(잠재 공간)와 latent vector(잠재 벡터) 잠재 공간: 잠재공간이란 데이터를 표현할 때 주요 특징을 모아놓은 추상적인 공간으로 이해할 수 있다. 즉, 복잡한 데이터를 낮은 차원에서 표현하여 주요 특징을 간결하게 담고 있는 공간이다. 하나의 데이터만 한정해서가 아니라 여러 데이터의 특징들이 잠재 공간에 들어갈 수 있다. 쉽게 말해서, 얼굴 이미지 데이터를 학습한 잠재 공간이 있다고 가정하면 코, 눈, 입의 위치나 크기 같은 중요한 특징들이 요약되어 표현된다.  잠재 벡터: 잠재공간의 하나의 지점(벡터)이다. 즉, 하나의 이미지의 모든 특징을 압축한 것이 바로 잠재 벡터이다.      https://www.youtube.com/watch?app=desktop&v=gJ86ixUx6MU 2024. 11. 16.
[기본 용어 정리] 밀도추정(Density Estimation) 밀도 추정이란?우선 밀도가 뭔지부터 알아보자. 밀도란 물리, 수학에서 말하는 밀도와는 좀 다르다. 확률/통계에서 말하는 밀도란 확률 밀도를 의미한다. 즉, 분포를 의미한다. 이제 밀도 추정에 대해서 알아보자. 밀도 추정(Density Estimation)은 여러 데이터 x에서 확률 밀도 함수(분포) P(x)를 예측하는 것이 밀도 추정이다.  [밀도 추정 방법] 모수적 밀도 추정(Parametric Density Estimation)미리 확률 밀도 함수(분포)에 대한 모델을 정해놓고 데이터들로부터 확률 밀도 함수(분포)의 파라미터(θ)를 추정하는 방식이다. 모수적 밀도 추정의 대표적인 예로는 MLE(최대 우도 추정)가 있다. 다만, 이렇게 확률 밀도 함수(분포)가 정해져있는 경우는 현실에서 많지 않기 때문.. 2024. 11. 16.
[기본 용어 설명] Generative approach vs Discriminative approach Generative approach: 주어진 데이터가 특정 결과에 속할 가능성을 구할 뿐만 아니라, 새로운 데이터를 생성할 수도 있는 접근 방식이다. 최종적으로 P(x | y)를 구하여 클래스 y에 따른 데이터 x의 분포를 예측하는 것이다. 또한, 클래스 y가 주어지지 않는 P(x) 즉, x의 분포를 예측하는 것은 VAE, GAN이 있다.  위의 Generative 이미지에 대해서 설명하자면, 빨간색 y와 파란색 y는 각각 다른 y인데, 이 각각의 해당하는 클래스 y에 따른 데이터 분포 x를 예측한다라는 의미이다.  장점데이터 생성 가능: 학습된 분포를 바탕으로 새로운 데이터를 생성할 수 있어, 비지도 학습이나 데이터 증강에 유용합니다.데이터 분포에 대한 심층적 이해: 입력 데이터와 결과 간의 전체 분포.. 2024. 11. 16.
[기본 용어 설명] MLE(Maximum Likelihood Estimation) - 최대 우도 추정 사전 확률 P(θ | D)에서 우도는 P(D | θ)이다. 즉, 우도란 매개변수가 특정한 값일 때 데이터 D가 나올 확률을 의미한다. 최대 우도 추정이라는 것은 결국 데이터 D가 많이 관찰되는 매개변수 θ를 찾는 것이다.  즉, 우리가 가진 데이터를 가장 잘 설명할 수 있는 매개변수 θ(분포를 결정하는 값)를 찾는 방법이다.  MLE를 구하기 위해서는 로그 우도 함수를 사용해야한다.   (1) --- 모든 x가 동시에 발생했을 때의 모든 우도를 구하는 것이기 때문에 결합 확률을 이용해 모든 우도를 곱한다. (2), (3) --- 연산을 좀더 간단하게 말들기 위해서 로그를 사용해서 로그의 기본 성질인 곱을 합으로 바꿀 수 있는 특징을 사용했다.  (4) --- 시그마로 모든 합을 표현 (오른쪽 수식) --.. 2024. 11. 16.
[기본 용어 설명] 베이즈 정리를 통한 사전 확률(Prior)과 사후 확률(Posterior), 우도(Likelihood) 우선 베이즈 정리를 알기 전 결합 확률(joint prbability)와 조건부 확률(condition probability)에 대해서 알아야한다. 결합 확률 - P(x, y)결합 확률이란 x사건과 y사건이 동시에 일어날 확률을 의미한다.  조건부 확률 - P(x | y)조건부 확률이란 y사건이 일어난 후 x사건이 일어날 확률을 의미한다.  결합 확률과 조건부 확률의 관계 - P(x, y) = P(x| y)P(y)결합 확률은 조건부 확률과 사건 x가 일어날 확률을 곱한 식으로 나타낼 수 있다.    베이즈 정리 이러한 관계를 이용해서  베이즈 정리를 정의할 수 있다. 일반적으로 P(x, y)와 P(y, x)의 확률이 같기때문에 아래의 식이 성립된다.  위 식을 P(y|x)에 대해서 정리를 하면 아래와 같.. 2024. 11. 15.
ColorPickerApp - state hoisting으로 3개의 slider의 값을 하나의 색으로 조합하기 따라서 코드를 설명하자면, 1. state 선언: 데이터 변화에 따라 UI를 변경하기 위해서 사용 2. 상위 Component에서 하위 Component에 state 전달 3.  하위 Component인 ColorPicker에서 slider를 통해서 값을 변경 4. 값이 변경되면 상위 Component의 state 값도 변경 + 동시에, 모든 UI 다시 랜더링 5. 모든 UI가 다시 랜더링 되면서, ColorInfoIntoText의 값도 함께 변경된다.   이런식으로 state가 변경되면 다시 랜더링되면서 모든 ui도 함게 변한다. 2024. 11. 13.
[이전 논문] CGAN CGAN이란? CGAN(Conditional GAN)은 생성 모델 G와 감별 모델 D의 입력에 조건 C를 추가하였다. C는 클래스 레이블, 속성 정보 등 데이터 생성에 필요한 추가 정보로, 생성 모델 G는 노이즈 z와 조건 C를 함께 입력받아 C에 맞는 데이터를 생성한다. 감별 모델 D는 입력 데이터가 진짜인지 가짜인지 판단한다이렇게 CGAN은 조건에 따라 데이터를 생성하도록 설정함으로써 GAN의 출력을 제어할 수 있게 된다." 💡C를 통해서 어떻게 조건부 생성을 할 수 있게 되는 것인가? 위 이미지로 설명을 해보겠다. 우선 C라는 조건은 노이즈 벡터를 샘플링할 때와 이미지 셋에서 샘플링할 때 주어진다. z는 C라는 정보를 토대로 샘플링을 하겠지만 원할하게 하지 못한다. 하지만 이미지 셋에서 샘.. 2024. 11. 12.
[이전 논문] GAN GAN의 구조 간단하게 설명하자면, Generator는 랜덤 노이즈 z를 입력 받아서 이미지를 생성하고, Deiscriminater는 가짜 이미지(G가 생성한 이미지)와 진짜 이미지를 랜덤으로 입력 받아서 진짜인지 가짜인지 구분한다. 진짜 이미지라면 1에 가까운 값을 가짜 이미지라면 0에 가까운 값을 출력한다. 여기서 헷갈리면 안되는 점은 X는 이미지 한개가 아니라 여러 이미지가 있는 이미지 데이터 셋이다. 따라서, 생성자는 실제 이미지 하나에 대해 특징을 학습하는 것이 아니라 이미지 데이터 셋 전체의 이미지들의 특징을 파악한다.  1. 초기 생성 과정이미지에서 보이듯이 상단의 노이즈 벡터가 생성기(G)의 입력으로 들어갑니다생성기는 이 랜덤 노이즈를 기반으로 초기 이미지를 생성합니다2. 학습 과정이미지의.. 2024. 11. 12.
11-9장 typedef typedef란?: 기존에 존재하던 자료형을 새롭게 정의할 때 사용한다.typedef를 사용하는 목적은 가독성 때문이다.    위처럼 이전에 정의되어 있던 자료형을 새로운 자료형으로 정의할 수 있다.    [typedef struct - 사용 예시]#include typedef struct point { int x; int y;} POINT;int main() { POINT p1 = { 1, 2 }; printf("p1.x: %d p1.y: %d", p1.x, p1.y); // p1.x: 1 p1.y: 2}   [typedef 무명 struct - 사용 예시]#include typedef struct { int x; int y;} POINT;int main() { .. 2024. 11. 12.
11-8장 열거형 열거형이란?: 정의된 값들만 가질 수 있는 자료형을 만드는 것과 같다. 예를 들어 int는 정수만 받을 수 있고, double을 실수만 받을 수 있는 것처럼말이다. 열거형을 만드는 이유는 가독성을 위해서이다.   #include enum days { MON, TUE, WED, THU, FRI, SAT, SUN };// 포인터들의 배열을 만들고 문자열 상수로 초기화한다. const char* days_name[] = { "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday" };int main(void){ enum days d; // enum days로 타입 캐스팅한 d를 1씩 증가 시키면.. 2024. 11. 12.
11-7장 공용체 공용체란?: 같은 메모리 영역을 여러 개의 변수가 공유해서 사용하는 것이다. 즉, int i가 특정 메모리 영역을 사용하면 char c는 해당 영역을 사용할 수 없다. union example { char c; // 같은 기억 공간 공유 int i; // 같은 기억 공간 공유};    #include union example { int i; char c;};int main(void){ union example data; data.c = 'A'; printf("data.c:%c data.i:%i\n", data.c, data.i); data.i = 10000; printf("data.c:%c data.i:%i\n", data.c, data.i); .. 2024. 11. 12.
11-6장 구조체와 포인터 구조체와 포인터: 구조체를 만들고 구조체 포인터 변수를 만들어 구조체의 주소를 할당해주면 구조체처럼 사용할 수 있다. #include #include struct student { int number; char name[10]; double grade;};int main(){ struct student s1 = { 24, "Kim", 4.3 }; struct student* p; p = &s; printf("학번=%d 이름=%s 학점=%f \n", s.number, s.name, s.grade); // 학번=24 이름=Kim 학점=4.3 printf("학번=%d 이름=%s 학점=%f \n", (*p).number, (*p).name, (*p).grade);.. 2024. 11. 11.
11-5장 const struct const를 구조체에 사용하는 이유데이터 보호, 가독성, 최적화, 메모리 절약 등 여러 면에서 유용특히 큰 데이터 구조를 전달할 때는 const 포인터가 복사 비용을 줄여 주므로, 메모리 절약 측면에서 유리할 수 있다. 따라서, 값에 의한 호출과 동일한 효과를 내지만 포인터와 const를 사용하는 이유는 값에 의한 호출로 큰 데이터 구조를 전달하면 많은 메모리를 잡아 먹기 때문에 const와 포인터를 사용해서 주소를 전달하지만 원본의 값은 변경하지 못하게 하는 효과를 낼 수 있다. 이렇게 하면 메모리를 절약할 수 있다.  [const struct 사용 예시]#include #include struct student { int number; char name[10]; double grade.. 2024. 11. 11.
11-4장 구조체와 함수 구조체와 함수구조체를 함수의 인자나 값으로 사용할 수 있는데, 이때는 "값에 의한 호출"이 원칙이다.   [값에 의한 호출 예시]#include #include int equal(struct student s1, struct student s2){ if (strcmp(s1.name, s2.name) == 0) return 1; else return 0;}struct student { int number; char name[10]; double grade;};int main(){ struct student s1 = { 25, "Mun", 3.92 }; struct student s2 = { 26, "KiM", 3.76 }; printf("%d".. 2024. 11. 11.
11-3장 구조체 배열 구조체 배열: 여러개의 구조체를 하나의 구조체로 만들 수 있다. 배열이기 때문에 인덱싱이 가능하다.struct student { int number; char name[20]; double grade;};int main(){ struct student list[100];// 구조체 배열 선언}   구조체 배열의 초기화2차원 배열처럼 선언하면 구조체 배열을 초기화 할 수 있다. struct student { int number; char name[10]; double grade;};int main(){ struct student list[3] = { { 25, "Mun", 3.92 }, { 24, "Kim".. 2024. 11. 11.
11-2장 구조체 변수의 대입과 비교 구조체 변수의 대입(=)은 가능하다!#include struct point { int x; int y;};int main() { struct point p1 = { 10, 20 }; struct point p2 = { 30, 40 }; P1 = P2;}  구조체 변수의 비교(==)는 불가능하다! #include struct point { int x; int y;};int main() { struct point p1 = { 10, 20 }; struct point p2 = { 30, 40 }; if (p1 == p2) // 컴파일 오류 { printf("p1와 p2이 같습니다."); }}  다만, 멤버끼리 비교를 통해서 결과를 도.. 2024. 11. 11.
11-1장 구조체 구조체의 선언 struct student { //구조체 정의 int number; char name[10]; double grade;};int main(void){ struct student s1; //구조체 변수 선언}   구조체의 초기화struct student { int number; char name[10]; double grade;};int main(){ struct student s1 = { 24, "Kim", 4.3 }; // (1) 구조체 기본 초기화 struct student s2 = s1; // (2) 이미 초기호된 구조체를 할당받아서 초기화}   구조체 멤버 참조위의 방식처럼 한번에 초기화하는 방법도 있지만 메모 참조(.)를 이용해서 초기화하는 것.. 2024. 11. 11.
7.4 Design of control unit / Fuction Field Fuction Field - F1, F2, F3 설계하기  왼쪽 표를 보고 오른쪽 논리 회로를 살펴보면 된다. 예를 들어, ADD는 F1에서 0 0 1이기 때문에 F1 Decoder에서는 0 0 1이 입력으로 들어오면 ADD 연산을 내보낸다. AND는 F2에서 0 1 1이기 때문에 F2 Decoder에서는 0 1 1이 입력으로 들어간다. 다른 부분들도 마찬가지로 디코더를 통해서 제어를 할 수 있다.    control unit 설계하기 ⭐️⭐️⭐️  빨간 박스 내부의 Control Unit을 설계해보자. 2024. 11. 9.
7.3 Micro-program example 7장에서 다루는 컴퓨터 구조AR(LD)Mux를 통해서 PC의 값이 전달 될지, DR의 값이 전달 될지 결정된다. PC(LD)Mux를 통해서 PC의 값이 전달 될지, 메모리 값이 전달될지, AC의 값이 전달 될지 결정된다.   Control memory: micro program들이 저장되는 메모리CARControl memory의 주소가 들어가는 레지스터 SBRreturn address가 저장되는 레지스터   명령어의 format - Memory에 적재되는 명령어(16bit) Opcode로 Control Memory의 주소로 변환하는 과정인 mapping을 각 Opcode에 하면 아래와 같다. ADD인 0 0 0 0 ➡️ 0 0 0 0 0 0 0BRANCH인 0 0 0 1 ➡️ 0 0 0 0 1 0 0ST.. 2024. 11. 9.
7.2 Address sequencing - Mapping 중점 Address sequencing: Control Memory에 있는 여러 Micro Instrction(명령어)들 중에서  어떤 Micro Instrction(명령어)을 수행하는지를 결정하는 것  명령어를 실행하기 위한 절차 1. Instruction fetch routine(명령어 가져오기)명령어를 가져오는 과정 2. Effective address 결정명령어의 실제 메모리 주소를 결정하는 과정 3. Fetched instruction(가져온 명령어 실행)가져온 명령어에 대한 구체적인 실행을 수행한 후, 다시 명령어 가져오기 루틴으로 제어가 반환  Address sequencing하는 4가지의 방법    나머지는 다른 장에서 설명하고 우선 Mapping을 이용한 방법에 대해서 살펴보자 MappingI.. 2024. 11. 9.
7.1 Control memory 5장에서는 하드웨어적(회로)으로 구현된 부분이라면 7장에서는 소프트웨어적(프로그램)으로 구현된 부분이다.  5장에서는 메모리의 프로그램 영역에 명령어들이 모여 하나의 프로그램을 이루었다. 이와 다르게 7장에서는 Control memory 내부에 micro program에 의해서 명령어가 수행되는 것이 Micro Computer라고 한다.  용어 Control Memory: Micro Program들이 저장되어 있는 메모리Micro Program: 제어 단어(Control word)를 출력하는 프로그램Control Word: 특정 클럭 신호에서 수행될 마이크로 연산들의 조합Control Variable: Control Word의 각각을 의미하며, 특정 마이크로 연산을 수행할지를 결정하는 변수Micro-In.. 2024. 11. 9.
2024.11.07 Q&A 1. 색상 왜곡에서 PCA(주성분 분석)를 사용한 방법 우선, PCA는 중요한 축을 찾는 것이다. 이 중요한 축(PCA 1st)은 축의 방향으로 데이터가 넓게 퍼져있다는 것이다. 그 축을 기준으로 데이터가 다양한 특징을 가지고 있다는 것이다. 그리고 다음 축(PCA 2nd)은 PCA 1st를 직교하는 축이 된다. 이제 PCA를 이용한 색상 왜곡을 해보자. PCA를 이용한 색상 왜곡에서 중요한 핵심은 RGB 각각의 색상을 독립적인 특징으로 보고, 이들 간의 상관관계를 통해 새로운 축을 정의하는 것이다. 1. 색상의 특징 찾기R, G, B를 각각 별개의 특징으로 보고, 이 세가지 색상이 어떻게 함께 변하는지 살펴보면서 서로 어떻게 영향을 주는지 보면서 색상의 중요한 변화를 알아낸다. 2. 가장 중요한 변화 .. 2024. 11. 9.