728x90

어느 공학도 학생이

 

카페에다가 임베디드 관련해서 너무 막연하여 질문글을 올리셨더라

 

다양한 답변들 중에 이건 꼭 남겨놔야해! 하는게 있어서

 

가져온다.

 

 

깊이 있는 분들은 다르다 o_O;;;

 

 

https://cafe.naver.com/carroty/344963

 

 

계속 수학 공부를 하곤 있지만 너무 어려워 힘들때가 많다

 

하지만 이 분도 이론과 수학이 중요하다고 하시니

 

손을 놓을수도 없내

 

바닥을 정말 잘 다듬어야겠다..

300x250

'미분류' 카테고리의 다른 글

대학 수학  (0) 2020.08.10
개발자에게 알고리즘이 중요한가?  (0) 2020.08.08
omar  (0) 2020.08.05
2020-08-02  (0) 2020.08.02
2020.07 학습 후기 및 8월 계획  (0) 2020.08.02
728x90

수학

- 현실의 문제를 추상화하여 해결하기 위한 과학적 언어

 

수학의 종류

- 대수학 algebra : 수학의 일반적인 성질을 연구하는 분야

- 해석학 analysis : 미분과 적분을 이용하여 함수의 연속성을 탐구하는 학문

- 기하학 geometry : 공간에 존재하는 도형의 성질(ex. 치수, 모양, 상대적 위치) 등을 다루는 학문

                       => 다루는 대상으로 점, 선, 면, 도형, 공간 등 존재

- 위상수학 topology : 연결성이나, 연속성, 작은 변화에 의존하지 않는 기하학적 성질을 다룸

- 이산수학 discrete mathematics : 정수, 그래프, 논리 연산 처럼 연속되지 않은 서로 구분되는 값을 다루는 학문

- 확률론 probability theory : 확률에 대해 연구하는 분야. 통계학의 기초

                           => 비결정론적인 현상 nondeterminsitic phenomenon을 수학적으로 표현하기 위함.

- 통계론 statistics : 산술적인 방법을 이용하여 다량의 데이터들을 관찰하고, 정리 분석하는 분야

https://ko.wikipedia.org/wiki/%ED%95%B4%EC%84%9D%ED%95%99_(%EC%88%98%ED%95%99)

 

 

컴퓨터 과학의 분야들

- 계산 이론 theory of computation : 어떤 문제들을 푸는게 가능한지. 어떻게 효율적으로 푸는지 다루는 학문.

                          => 계산 가능성 이론과 계산 복잡도 이론으로 나뉨 + 추상 기계(튜링 머신)을 다룸

- 시스템 아키텍처 system architecture : 시스템 구조, 행위 등을 정의하는 개념적인 모델링하는 학문

- 컴퓨터 그래픽스 Computer Graphics : 컴퓨터를 이용해 실제 영상을 조작하거나 새로운 영상을 만드는 기술

- 계산 과학 : computational science : 과학/공학 문제를 수치적 방법과 컴퓨터로 푸는 분야

     => 계산 과학에서 주로 사용하는 방법들 : 수치 해석, 룽게 쿠타방법, 몬테카를로 방법, 퓨리에 변환, 뉴턴 방법 등

https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%82%B0%EC%88%98%ED%95%99

 

300x250

'수학 > 수학, 수치해석' 카테고리의 다른 글

대학수학 - 6. 미분  (0) 2020.08.10
대학수학 - 5. 수열  (0) 2020.08.10
대학수학 - 3. 집합  (0) 2020.08.07
대학수학 - 2. 수학의 개요  (0) 2020.08.06
대학수학 - 1. 시작  (0) 2020.08.06
728x90

집합 set

- 서로 구별할수 있고 명확히 정의된 것들의 모임

 

원소 element

- 집합을 구성하는 요소들

 

원소의 표기법

- 원소 나열법 : 집합과 원소들 전체를 나열한 것

- 조건 제시법 : 집합에 속하는 원소들에 대한 조건을 써서 보여주는 방법

- 아래의 그림은 원소 나열법의 예시(패턴인식). 특징 벡터 X의 원소로 x1, x2, ...., xn이 존재하는데 원소나열법으로 표기

 

 

 

부분집합

- 일부 원소들의 모임

- 위 그림의 예시를 들자면 x1 ~ x3까지의 원소들이 Y라는 집합을 구성한다고 하자 Y는 집합 X(특징 벡터)의 부분집합임

 

 

* 내가 넣고 싶은 내용만 넣다보니 생략한것도 많습니다.

 

확률

- 특정한 사건이 발생할 가능성을 나타내는 척도

 

고전적 의미의 확률

- 표본 공간 sample에서 사건 event에 속하는 원소들이 차지하는 비율

=> P(A) = 사건 A의 원소 갯수 / 표본 공간에 존재하는 전체 워소의 갯수

 

 

함수

- 두 집합에 속하는 원소간의 관계

- ex. y = f(x)

 

 

함수 관련 표기

- 집합 X에서 Y로의 함수 f => f : X -> Y

    * 즉 함수 f는 집합 X에서 Y로 대응 관계를 가짐 => x값을 주면 y값으로 바꿔준다 ! ==  y = f(x)

    * 위 개념은 선형 대수나 공업 수학 등에서 많이 나오는 형태이므로 꼭기억하자

    * 생긴건 되게 간단하고 뭔뜻인지 알거같은데 정확하게는 몰라서 힘들었다 ...

 

정의역 치역 공역

- 위에서 집합 X에서 Y로의 함수 f에 대한 표기 f : X -> Y를 살펴보았는데

- 여기서 집합 X를 정의역, Y를 공역이라 한다.

 * 정의역은 함수 f의 입력이 되는 집합, 치역은 x를 입력했을때 함수 f의 출력이 되는 집합!!

- 정의역 X의 원소가 함수 f를 통해 대응되는 집합 Y 원소들의 모임(부분집합)을 치역이라 부름

 

 

 

 

전사, 단사, 전단사, 역함수

http://www.ktword.co.kr/abbr_view.php?m_temp1=5084

 

기함수 우함수

- 우함수 even function : f(-x) = f(x) => 좌우 대칭인 함수

- 기함수 odd function : f(-x) = -f(x) => 좌우 상하 대칭인 함수

https://mcornettscifi.weebly.com/pre-calc-blog/even-and-odd-functions

 

 

 

초월함수 transcendental function

- 시간에 따라 선형적으로 증가가 아니라 갑자기 증가하는 형태를 가짐

- 아래의 그림은 초월 함수의 예시들

https://ko.wikipedia.org/wiki/%EC%B4%88%EC%9B%94%ED%95%A8%EC%88%98

 

 

 

대수함수 algebraic function

- +, -, *, /과 같은 대수연산으로 이루어진 함수

https://ko.wikipedia.org/wiki/%EB%8C%80%EC%88%98%ED%95%A8%EC%88%98

 

 

 

 

 

 

 

 

 

 

300x250
728x90

수학 mathmetics

- 수학은 현실의 문제를 추상화하여 해결할수 있도록 문제를 정의할수 있는 과학의 언어

 

수학의 연구

- 고대 그리스 시대부터 본격적으로 연구

 -> 플라톤이 기하학을 모르면 공부하러 오자말라고 할정도

- 유클리드의 "element"가 과거 수학의 교과서 역활 함

- 17세기서 페르마, 데카르트, 파스칼, 뉴턴 등의 수학자들이 나옴

 

뉴턴과 라이프니츠의 업적

- 미적분학 등 해석학의 발전에 기여

 -> 수학은 추상화 일반화 경향이 커짐.

 

수학의 분류

- 순수 수학 : 추상화된 문제를 해결하기 위한 이론 세움

- 응용 수학 : 물리학, 공학, 사회과학 에서 필요

        -> 순수 수학으로 얻은 이론을 현실 문제에 적용. 문제를 추상화하여 현실에 적용

 

쾨니히스베르크의 다리문제

- 두 섬과 육지 사이 7개 다리를 한번에 건널수 있는 길 찾기

 => 찾지 못함. NP완비와 관련

- 오일러는 이걸 한붓 그리기 문제로 단순화하여 산책로가 없음을 증명

 

 

쾨니히스베르크의 다리문제로 얻을수 있는 통찰과 수학을 이용한 문제 해결

1. 오일러는 다리 문제 추상화

2. 한붙 그리기 문제로 변환

3. 한붓 그리기가 가능한지 수학적 정리로 적용

4. 불가능함을 증명

 

 

수학을 이용한 현실 세계와 추상적 세계의 관계

- 현실 세계 -> 추상화, 문제화 -> 추상적세계

- 현실 세계 <- 해결, 적용 <- 추상적 세계

 

 

 

 

 

 

 

 

 

 

정의 theorem이란?

- 추상화된 문제는 수학자들이 발견한 중요한 결과. 수학적 정리로 해결.

- 정리 : 사전에 옳다고 정의

   => 정리는 특정 사실(가정)을 옳다고 생각하면 결론이 참이 된다라는 명제의 형태를 띔

- 명제 :  P이면 Q이다.

- 대우명제 : Q가 아니면 P가 아니다와 같이 명제의 반대화된 경우를 말함

 

 

수학적 명제의 증명 방법들

1.  연역법

     - 일반적으로 알려진 이론을 어떠한 현상에 대입시켜 이에 대한 결론을 도출해내는 방법

2. 귀류법

     -  명제의 참을 증명하기 힘들때, 명제가 거짓이라 가정하고 그 명제가 모순됨을 보임

          => 원 명제가 참이라 할수 있음. 간접 증명법

3. 수학적 귀납법 mathmetical induction

    - 특정 명제가 참임을 증명하고, 다음 명제가 참임을 보여주고, 모든 겨우에 참임을 증명하는 식

    => 이미 알려진 것을 논리적으로 다시 증명하는 방법

 

 

 

 

 

 

 

 

집합 set

- 특정 규칙을 따르는 원소들의 모임

 

 

체 or 장(field. -> ex. vector field, likelihood field)

- 실수의 기본 성질들을 만족하는 집합

 

 

구간 interval

- 구간의 양 끝점을 포함하느냐에 따라 달림

- 열린 구간 open interval : 끝점을 포함하지 않는 구간

      => 표현 : a < x < b      (a, b)

- 닫힌 구간 closed interval : 끝 점을 포함하는 구간

      => 표현 : a <= x <= b      [a, b]   

https://mathworld.wolfram.com/Interval.html

 

 

 

 

상항, 하한(상계, 한계)

- 상한, 상계 upper bound : x <= a에서의 a

- 하한, 한계 lower bound : a <= x에서의 a

 

 

 

좌표계와 방정식

- 좌표계 : 수가 주어질때 수들의 순서쌍을 좌표상에 나타내는 공간

- 방정식 : x, y 수들의 대응 관계를 표현한 수식

1. 데카르트 좌표계(직교 좌표계, 카티지안 좌표계)

 - 일반적으로 사용하는 x, y좌표계

 - 직교 좌표계, 카티지안 좌표계라고도 하며 수학자 데카르트가 제안한 좌표계

https://en.wikipedia.org/wiki/Cartesian_coordinate_system

2. 방정식(그래프) equation

 - 직선의 그래프(선형)

 - 곡선의 그래프, 원그래프(비선형) 등 다양한 그래프들이 존재

https://www.mathplanet.com/education/algebra-1/formulating-linear-equations/writing-linear-equations-using-the-slope-intercept-form

 

https://www.mathwarehouse.com/geometry/circle/equation-of-a-circle.php

 

 

 

 

 

 

 

300x250
728x90

최근 컴퓨터 비전과 패턴 인식 학습을 하면서

 

확률적 로봇공학과 마찬가지로

 

공업수학을 배운 이후가 배우기 전에 봤을때와

 

이해할수 있는 정도가 확실히 달랐다.

 

 

하지만 여전히 수식 각각의 의미는 알겠지만

 

수식들이 연결되어 알고리즘을 이루어지는 형태가 잘 눈에 익지는 않는다.

 

그래서 공학 분야에서 수학 전반을 정리해볼 필요가 있을것 같아

 

대학수학을 정리하고자 한다.

 

 

 

이제 슬슬 실습도 필요하긴 한데,

 

실습을 시작하기전에 잠시

 

이론적인 내용들을 다루는 시간을 더 갖고자 한다.

 

 

대학 수학, 통계, 확률론 정도 빠르게 정리하고 나서

 

실습 내용들을 넘어가면

 

지금 바로 실습 정리하는것 보다 훨씬 완성도 있게 글을 쓸수 있을것 같다.

 

우선 지금 할 내용들은 대학 수학의 전반에 대해서

 

당장 재정리할 부분만 빠르게 보고 넘어가려고 한다.

 

 

대학 수학의 구성

1 수학의 기초

2. 집합과 함수

3. 수열과 극한

4. 미분

5. 적분

6. 행렬과 벡터

7. 연산

 

등으로 정리할수 있을것같다.

 

 

 

수학이 왜필요한가

 

현대 자연/사회 과학 등의 분야들은 다 수학의 개념들을 기반으로 발전했고

 

수학이란 언어를 통해서 연구를 제시하고 문제를 해결할 능력을 키울수 있게 되었다.

 

전문적인 수학의 한 분야 처럼 깊이 있지는 않더라도

 

우리가 배워야할 부분, 알아야할 부분이 어디까지 있겠는지 생각을 정리할수 있으면

 

이번 대학 수학 정리를 마무리 할수있을것같다.

 

 

300x250
728x90

선형 판별 분석 LDA

- 선형 반별 분석 Linear Discriminant Analysis LDA는 주성분 분석 Principal Component Analysis같은 차원 축소법

- 클래스간 분산을 최대화 하고, 클래스내 분산을 최소화 하는 방법

 

 

 

LDA 수행 결과

- 클래스 분할을  최대화하는 주축으로 사상하여, 선형 부공간으로 차원 축소

- 아래의 경우 2차원 샘플 데이터에 LDA를 수행한 결과

 => 좌측의 1차원 부공간은 최악의 선형 부공간

 => 우측의 1차원 부공간은 최적의 선형 부공간으로 모든 2차원 샘플데이터가 분류하기 적합하게 분포됨.

 

https://funnypr.tistory.com/entry/Linear-Discriminant-AnalysisLDA

 

 

 

 

LDA와 PCA의 차이

- 아래의 그림은 PCA와 LDA의 차이를 보여줌

 => PCA는 분산을 최대화하는 주축을 찾음. -> 데이터의 표현을 남기도록 축소

 => LDA는 데이터 분할에 적합하도록 최대화하는 주축을 찾음. -> 데이터 최적 분류로 축소

https://rpubs.com/markloessi/505575

 

 

 

LDA의 의미

1. 클래스 omega_1에 속하는 N_1개의 샘플과 클래스 omega_2에 속하는 N_2개의 샘플 데이터들

 d차원 표본들의 집합 x = {x1, ..., x_n}이 있을때, 1차원 직선상의 사영을 다음의 선형 변환 식으로 표현

2. omega_1과 omega_2에 속하는 샘플들. 클래스 내부의 샘플들은 분산을 줄이고, 클래스 간의 분산을 키우도록 수행

=> 주성분 분석 PCA가 데이터를 잘 표현하는 D차원에서 A차원으로 변환했다면

=> LDA는 클래스간 분산이 최대화 되도록 D차원에서 1차원으로 변환.

 

 

300x250

'인공지능' 카테고리의 다른 글

인공지능 - 3. 지식  (0) 2020.11.11
인공지능 - 1. 개요 ~ 탐색  (0) 2020.10.15
패턴인식 - 8. 주성분분석  (0) 2020.08.05
패턴인식 - 7. 비모수 밀도 추정  (0) 2020.08.04
패턴인식 - 6. 가우시안 혼합 모델  (0) 2020.08.04
728x90

컴파일러와 리버스 컴파일러

- 컴파일러 : 소스 코드 -> 기계어

- 리버스 컴파일러 : 기계어 -> 어셈블러/소스코드

 

 

인터프리터와 컴파일러

- 인터프리터 : 소스코드 한줄 씩 즉시 실행

- 기계어 : 소스코드 전체 기계어로 변환 후 실행

 

 

컴파일러 도구 정리

- 컴파일러 : 소스 코드 -> 어셈블리어

- 어셈블러 : 어셈블리어 -> 기계어(오브젝트 파일)

- 링커 : 오브젝트 파일들을 연결시켜 하나의 실행 가능한 파일(기계어) 생성

 

 

MCU와 고급언어

- 고급언어로 작성한 소스코드는 컴파일러에의해 어셈블리어로 변환, 이후 어셈블러로 각 MCU에 맞는 기계어로 변환됨

- ARM 어셈블리어 -> ARM 기계어

- AVR 어셈블리어 -> AVR 기계어

- x86 어셈블리어 -> X86기계어

 

 

기계어, 어셈블리어

- 기계어 : 0과 1로 이루어진 바이너리 코드

- 어셈블리어 : 기계어와 사람이 이해할 수 있는 명령어를 매칭시켜 만든 언어

- 아래의 그림은 고급언어, 어셈블리어, 기계어 사이 차이를 보여주고 있음

https://asecurity.dev/2017/07/%EC%97%AD%EB%B6%84%EC%84%9D-%EA%B8%B0%EA%B3%84%EC%96%B4%EB%A5%BC-%EB%B6%84%EC%84%9D%ED%95%9C%EB%8B%A4-disassemblers/

 

 

 

ARM 명령어 집합과 포멧

- ARM은 고정 크기와 형식을 갖는 명령어 사용. 아래의 그림은 32비트 고정 길이 명령어 집합을 보여줌.

- 아래와 같은 포멧으로 요소별 의미를 이해하여 올바른 값을 주면 곱샘, 인터럽트 등 기능 수행

https://damduc.tistory.com/115

- 좌측은 ARM 기계어 명령어, 우측은 디스어셈블한 어셈블리어 코드

http://www.jkelec.co.kr/img/lecture/arm_arch/arm_arch_4.html

 

 

 

명령어 처리기와 기계어

- 명령어 처리기가 해석하는 방식에 다라 기계어 코드가 달라야 함

 => 동일한 기계어 코드도 명령어 처리기가 다르면 다르게 해석

- 대표적인 명령어 처리기 구조 : RISC와 CISC

 

 

RISC와 CISC

- RISC Reduced Instruction Set Computer

  리스크. 축약된 명령어 집합. 적은 수의 명령어들만 제공 -> 단순구조, 고속

           => RISC 명령어 셋을 가진 경우. RISC머신(대표적으로 ARM)

- CISC Complex Instruction Set Computer

   씨스크. 복잡한 명령어 집합. 수많은 명령어들 제공 ->복잡구조, 저속 

          => CISC 명령어 셋을 가진 경우. CISC 머신(대표적으로 x86)

- 곱셈 연산에서의 리스크와 씨스크의 차이

 -> CISC는 mul 명령어로 곱샘 수행. RISC는 값들을 레지스터에 담은 후 반복문 수행

 -> CISC가 단순하다

 

 

 

통합 개발환경

- GUI 환경에서 개발을 편리하게 할수록 도와주는 도구

- 텍스트 에디터(소스 편집기)

- 빌드 도구 : 컴파일러, 어셈블러, 링커

- 디버거 : 실제 MCU를 동작시키며 MCU 변수, 레지스터 등의 상태 변화 학인

- 에뮬레이터 : MCU와 개발 환경을 연결시켜줌

- 시뮬레이터 : 가상의 기계와 개발 환경을 연결시킴

 

 

 

 

 

 

 

 

 

컴파일 과정

1. 전처리 preprocessing

- c언어에서 #define이나 #include 명령어들이 존재 

 => #define은 해당 단어 치환하고, #include는 관련 해더파일 복붙

 

2. 낱말 분석 lexical analysis

- 어셈블리어는 명령어와 데이터만으로 구성 => C언어도 명령어와 데이터로 구분하자

 => 몇개의 데이터, 명령어 등이 필요한지 알 수 있음.

- 아래의 그림은 낱말 분석 입력 예시

- 낱말 분석의 결과 아래와 같이 지시자, 식별자, 연산자, 값 등으로 정리됨

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

 

3. 코드 최적화 code optimization

- 실행 공간을 절약하거나, 사용하지 않는 변수 제거하는 등 작업 수행

- 아래의 그림은 공간 낭비를 줄여주는 최적화 예시

https://atadiat.com/en/e-application-note-tips-tricks-optimize-c-code/

 

 

4. 메모리 테이블화 (심볼 테이블)

- 코드에 존재하는 변수들을 읽고 저장하기 위해 메모리 필요. -> 메모리 주소와 변수 명을 연결

 => 심볼 테이블 작성 : 해당 변수가 어느 메모리를 사용하는가?

- 심볼 테이블은 변수들을 ID로 관리. 변수들은 고유의 수납장 번호(이름을 갖고 있음)

 

https://victorydntmd.tistory.com/241

 

 

5. 구문 분석 syntax analysis

- 구문 syntax의 의미 : 단어들이 모여서 만든 의미

 => 코드가 언어의 문법을 따르는지 분석. 구문 나무 syntax tree 사용

- 구문 나무 사용 이유 : 명령어와 변수 구분이 편하고, 어셈블리어로 변환이 쉬움

- 아래의 그림은 구문 나무를 이용하여 명령어와 데이터 정리 형태를 보여줌

http://chirucprogvideos.blogspot.com/2015/06/compiler-and-interpreter.html

 

- 단어 분석과 구문분석의 결과 예시

https://homoefficio.github.io/2019/01/31/Back-to-the-Essence-Java-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C-%EC%8B%A4%ED%96%89%EA%B9%8C%EC%A7%80-1/

 

 

 

6. 어셈블리어 명령어 치환

- 구문 분석과정에서 명령어와 데이터가 구분됨

 => 데이터는 심볼테이블 ID(주소), 명령어는 어셈블러로 치환하자

 

7. 어셈블리어 완성

- 데이터들을 실제 메모리로 할당

 

8. 완성된 어셈블리어로 기계어 생성

- 어셈블리를 이용해서 기계어 작성

https://www.slideserve.com/barny/assembly-machine-language

 

300x250
728x90

1. 차원이 너무 클때의 문제와 개선법

차원을 줄여야 하는 이유

- 패턴 인식에서 다차원의 특징 벡터를 사용하는데 어떤 벡터를 사용할까?

- 어떤 벡터를 사용할지와 특징 개수에 따라서 패턴 인식기의 성능이 크게 좌우됨.

 

차원의 저주 curse of dimensionality : 차원이 큰 경우의 문제점

- 잡음들도 포함되어 분류에 에러가 심해짐

- 패턴 분류기의 학습과 분류 속도가 느려짐

- 모델링해야할 집합이 너무 큼

 

주성분분석 principal component analysis

- 고차원 특징 벡터를 중요한 특징들을 추출하여 저차원의 특징벡터로 만드는 방법

 

주성분 분석의 사용 예시

- 데이터 시각화 : 고차원 데이터를 시각화 하기 위해서 2차원이나 3차원으로 축소함

- 특징 추출 : 고차원 데이터 집합에 강건한 분류기를 만들려하나 샘플이 부족

               -> PCA로 차원 축소하여 설계시 적은 샘플로 좋은 성능 보임

 

 

 

 

 

 

 

 

2. 고유 벡터와 고유치

고유벡터와 고유치 개요

- 행렬 A가 주어질때 다음의 정의를 만족하는 값 lamdba를 고유치 eigen value 와 벡터 v를 고유 벡터 eigen vector

고유벡터의 의미

- 행렬 곱셈의 특별한 경우

- 다음의 예시를 보자

- 위의 곱은 원래 백터의 스칼라 곱으로 결과가 안나오지만, 아래의 곱샘 결과는 원래의 벡터에 스칼라 곱이 나옴

- 이유 

     1. 벡터 (3; 2)는 2차원 점으로 원점 (0,0)에서 (3, 2)를 가리킴.

     2. 좌측의 정방 행렬은 벡터의 왼쪽에서 곱하여 벡터를 다른 위치로 만든는 변환 행렬

     3. 정방 행렬이 벡터를 직선 y = x에 대칭하게 만드는 행렬의 경우, 벡터는 변환 행렬을 곱해도 자기자신이 됨

     4. 이 때 벡터 (3; 2)는 변환 행렬의 고유 벡터

- 특징

     1.고유 벡터는 정방 행렬에서만 존재하나 모든 정방 행렬은 고유 벡터를 갖고 있지 않음.

     2. 정방 행렬이 n x n 인 경우 고유 벡터는 n 개

     3. 고유 벡터는 곱하기 전에 스케일링을 해도 여전히 동일한 스칼라 곱의 결과가 나옴

        => 스칼라 값은 고유벡터의 길이를 늘리거나 줄이기 밖에 못함

     4. 고유벡터들은 서로 직교 orthogonal함

        => 셈플 데이터들을 x-y축이 아닌 직교 고유 벡터를 기저로하여 표현 가능

 

 

고유 값의 의미

- 이미 고유 벡터에서 설명.

- 고유 벡터의 스칼라 곱이 고유값 -> 위 예시에서 4가 고유벡터의 고유치

 

 

* 고유값과 고유벡터가 중요한 이유 !!!!

-> 특이값 분해 SVD, 선형 연립방정식의 해, 주성분 분석 PCA 등 많이 사용됨

 

 

 

 

 

 

 

3. 주성분 분석법

다변량 분석 multivariate analysis

- 각 차원간에 상관 관계를 가지는 변수 데이터들을 다루게 됨.

 

주성분 분석 PCA Principal Component Analysis

- 다차원 특징 벡터로 이루어진 데이터의 정보들은 유지시키면서 낮은 차원으로 축소시키는 다변량 처리 방법 중 하나

 

주성분 분석에서의 차원

- 특징 데이터는 특징 벡터의 차원수 만큼의 축을 기준으로 표현

 => ex. 2차원 특징 데이터는 2개의 기준 축으로 표현

- 차원 축소 -> 기준 축을 줄여나간다 

 => 10차원 데이터를 4차원으로 줄인다 -> 10개의 기준축을 4개로 축소함

 

주성분 분석의 과정

1. 다변량 데이터의 주성분인 주축을 통계적 방법으로 구함

2. 주축 principal axis 방향으로 특징 벡터 x를 사영 projection하여 차원 축소.

=> 상관 관계있는 변수들을 상관 없는 변수들의 집합으로 기준축 중심으로 변환하는 것

=> Karthunen-Loeve 변환 KL 변환이라고도 부름

 

차원 수를 축소하는 이유

- 차원의 저주 문제를 개선하기 위해 줄이며, PCA로 낮은 차원에서 최적의 특징 벡터를 효과적으로 다룰 수 있음

 

주성분 분석의 주축에 따른 변화

- 주축을 어떻게 설정하느냐에 따라서 변량의 분산이 달라짐

 => 가장 유용한 성분은 가장 큰 분산값을 가질떄의 성분들

 

 

 

 

 

 

 

4. 고유치, 고유벡터 실습

4.1 균일 분포 샘플 띄우기

 균일 분포로 차원이 2인 벡터 1000개 생성 후 플로팅

clc;
clear all;


R1 = rand(1000, 2);
figure;
plot(R1(:,1), R1(:,2), "r*");

grid
axis("square");
title("uniform distributed random vectors");
xlabel('x');
ylabel("y");

 

4.2 원점 조정

- 샘플 데이터의 중심이 0이 되도록 수정

clc;
clear all;


R1 = rand(1000, 2);


R1_mean = [mean(R1(:,1)), mean(R1(:,2))];
Rctr = [R1(:, 1) - R1_mean(:, 1) , R1(:,2) - R1_mean(:,2)];
figure;
plot(Rctr(:,1), Rctr(:,2), "r*");


grid
axis("square");
title("uniform distributed random vectors의 원점을 0으로");
xlabel('x');
ylabel("y");

 

4.3 샘플 데이터를 원으로 만들기

- 반경 0.5 넘어가는 샘플들은 제거

clc;
clear all;


R1 = rand(1000, 2);


R1_mean = [mean(R1(:,1)), mean(R1(:,2))];
Rctr = [R1(:, 1) - R1_mean(:, 1) , R1(:,2) - R1_mean(:,2)];

for i = 1:1000
    
    if ((sqrt(Rctr(i, 1)^2 + Rctr(i, 2)^2)) > 0.5)
        for j = 1 : 2
            Rcirc(i, j ) =0;
        end
    else
        for j = 1 : 2
            Rcirc(i, j) = Rctr(i, j);
        end
    end
end

plot(Rcirc(:,1), Rcirc(:,2), "r*");

grid
axis("square");
title("uniform distributed random vectors의 원점을 0으로");
xlabel('x');
ylabel("y");

 

 

 

4.4 공분산 행렬과 고유벡터, 고유치 구하기

- 방금 구한 원의 데이터들로 공분산 행렬 계산

clc;
clear all;


R1 = rand(1000, 2);


R1_mean = [mean(R1(:,1)), mean(R1(:,2))];
Rctr = [R1(:, 1) - R1_mean(:, 1) , R1(:,2) - R1_mean(:,2)];

for i = 1:1000
    
    if ((sqrt(Rctr(i, 1)^2 + Rctr(i, 2)^2)) > 0.5)
        for j = 1 : 2
            Rcirc(i, j ) =0;
        end
    else
        for j = 1 : 2
            Rcirc(i, j) = Rctr(i, j);
        end
    end
end



N = 1000
a = 0;
for i = 1 : N
    a = a + Rcirc(i, 1)^2;
end
a = a /N;

b = 0;
for i = 1 : N
    b = b + Rcirc(i, 1) * Rcirc(i, 2);
end
b = b /N;

c = 0;
for i = 1 : N
    c = c + Rcirc(i, 2)^2;
end

c = c / N;
C = [a b;b c]

[EigenVector, EigenValue] = eig(C)

 

 

 

5. 주성분 분석실습

- 방금 구한 2차원 데이터를 1차원으로 축소시키자

5.1 데이터 준비하기

 균일 분포로 차원이 2인 벡터 1000개 생성

- 방금 구한 2차원 데이터를 1차원으로 축소시키자

clear all;
close all;
clc;

% 정규 분포를 따르는 2차원 데이터 생성
x(1, :) = randn(1, 100);
x(2, :) = randn(1, 100) *3;

% 타원 모양 분포를 약간 회전시키자
% 카티지안 좌표계를 극좌표계로 변환후 pi/3회전 후 다시 카티지안으로변환
[p(1, :), p(2,:) ] = cart2pol(x(1, :), x(2, :));
p(1, :) = p(1, :) - pi/3;
[x(1, :), x(2,:)] = pol2cart(p(1,:), p(2,:));

% 데이터 플로팅
scatter(x(1,:), x(2,:));
axis equal;

 

5.2 주성분 찾기

- pacov : 공분산 행렬로 주성분을 바로 구하여 고유값 크기순으로 정렬해주는 함수

 * 주성분 : 고유 벡터를 기저로하고, 고유치만큼 길이를 갖는 데이터를 가장 잘나타내는 축?

=> 붉은 선이 제1 주성분으로 최대 변동 축

=> 녹색 선이 제 2 주성분 , 제1주성분과 수직

clear all;
close all;
clc;

% 정규 분포를 따르는 2차원 데이터 생성
x(1, :) = randn(1, 100);
x(2, :) = randn(1, 100) *3;

% 타원 모양 분포를 약간 회전시키자
% 카티지안 좌표계를 극좌표계로 변환후 pi/3회전 후 다시 카티지안으로변환
[p(1, :), p(2,:) ] = cart2pol(x(1, :), x(2, :));
p(1, :) = p(1, :) - pi/3;
[x(1, :), x(2,:)] = pol2cart(p(1,:), p(2,:));


% 데이터 플로팅
scatter(x(1,:), x(2,:));
axis equal;

% 주성분 PC 찾기
[pc, latent, explained] = pcacov(cov(x'));

% 데이터 상에 주성분 그림
hold on;
plot([-4 4] * pc(1,1), [-4 4] *pc(2, 1), 'r-');
plot([-2 2] * pc(1,2), [-2 2] *pc(2, 2), 'g-');

 

 

5.3 데이터들이 주성분을 주축으로 하도록 회전

-원 데이터 집합과 주성분을 곱하면 데이터들이 주성분이 주축이 되도록 회전됨

clear all;
close all;
clc;

% 정규 분포를 따르는 2차원 데이터 생성
x(1, :) = randn(1, 100);
x(2, :) = randn(1, 100) *3;

% 타원 모양 분포를 약간 회전시키자
% 카티지안 좌표계를 극좌표계로 변환후 pi/3회전 후 다시 카티지안으로변환
[p(1, :), p(2,:) ] = cart2pol(x(1, :), x(2, :));
p(1, :) = p(1, :) - pi/3;
[x(1, :), x(2,:)] = pol2cart(p(1,:), p(2,:));


% 주성분 PC 찾기
[pc, latent, explained] = pcacov(cov(x'));

% 주성분을 축으로 데이터를 회전
y = (x' * pc)';

% 데이터 플로팅
figure;
scatter(y(1, :), y(2, :));
axis equal;

 

 

 

 

5.4 축 상으로 주성분이 놓여졌는지 확인하기

clear all;
close all;
clc;

% 정규 분포를 따르는 2차원 데이터 생성
x(1, :) = randn(1, 100);
x(2, :) = randn(1, 100) *3;

% 타원 모양 분포를 약간 회전시키자
% 카티지안 좌표계를 극좌표계로 변환후 pi/3회전 후 다시 카티지안으로변환
[p(1, :), p(2,:) ] = cart2pol(x(1, :), x(2, :));
p(1, :) = p(1, :) - pi/3;
[x(1, :), x(2,:)] = pol2cart(p(1,:), p(2,:));


% 주성분 PC 찾기
[pc, latent, explained] = pcacov(cov(x'));

% 주성분을 축으로 데이터를 회전
y = (x' * pc)';

% 데이터 플로팅
figure;
scatter(y(1, :), y(2, :));
axis equal;

% 주성분 PC 찾기
[pc2, latent, explained] = pcacov(cov(y'));
% 데이터 상에 주성분 그림
hold on;
plot([-4 4] * pc2(1,1), [-4 4]*pc2(2,1), 'r-');
plot([-2 2]* pc2(1, 2), [-2 2] *pc(2, 2), 'g-');

 

 

5.5 주성분 분석

-원 데이터와 주성분을 내적하면 데이터들이 주성분 축으로 사상되어 1차원 데이터로 축소됨

clear all;
close all;
clc;

% 정규 분포를 따르는 2차원 데이터 생성
x(1, :) = randn(1, 100);
x(2, :) = randn(1, 100) *3;

% 타원 모양 분포를 약간 회전시키자
% 카티지안 좌표계를 극좌표계로 변환후 pi/3회전 후 다시 카티지안으로변환
[p(1, :), p(2,:) ] = cart2pol(x(1, :), x(2, :));
p(1, :) = p(1, :) - pi/3;
[x(1, :), x(2,:)] = pol2cart(p(1,:), p(2,:));


% 주성분 PC 찾기
[pc, latent, explained] = pcacov(cov(x'));

% 주성분을 축으로 데이터를 회전
y = (x' * pc)';

% 1차원으로 축소하기 위해 두번째 성분을 0으로 설정.
y(2,:)=0;

%원 데이터 역변환
x = (y' * inv(pc)');

% 데이터 플로팅
figure;
scatter(y(1, :), y(2, :));
axis equal;

300x250
728x90

 

 

오마르님을 처음 알게만든 영상

 

이 영상을 보고나서

 

오마르님 영상을 가끔 보게 되었는데 듣다보면

 

팩폭이 묵직하다

 

 

 

300x250

'미분류' 카테고리의 다른 글

개발자에게 알고리즘이 중요한가?  (0) 2020.08.08
한 선배 개발자의 덧글  (0) 2020.08.07
2020-08-02  (0) 2020.08.02
2020.07 학습 후기 및 8월 계획  (0) 2020.08.02
2020-08-02  (0) 2020.08.02
728x90

MCU Micro Controller Unit

- 전자제품에사용되는 제어 유닛

- 주위 주변장치 GPIO, UART 등 제어함

- CPU보다 저전력, 저성능, 저럼, 많이사용

- 구성 : 메모리, 레지스터, 페리페럴, 버스 등으로 구성

참고 : https://www.hackerschool.org/Sub_Html/HS_University/HardwareHacking/04.html

 

 

 

PCB Printed Circuit Board

- 녹색 전자 회로 기판

- 이 위에 MCU와 다른 전자 소자 등이 올라감

 

https://en.wikipedia.org/wiki/Printed_circuit_board

 

 

IC Integrated Circuit

- 집적화된 회로

- 전자 부품, 소자들을 모아 하나의 회로에 집적화한것

- 아래의 그림은 IC칩의 패키지들. IC칩 내부 소자들을 보호하기 위한 플라스틱 케이스

 

http://blog.daum.net/go_ahead/14

- 아래의 그림은 다이칩 die chip : 실제 패키지 내부 IC

https://metallux.ch/hybridcircuit/chip-on-board-cob/

 

 

 

 

MCU 내부 장치

1. 버스

- 메모리, 페리페럴, CPU 사이 데이터 주고받기위한 공용 통로.

- Control bus 제어버스, Address bus 주소버스, Data bus 데이터버스 등 존재

- MCU가 제어 명령, 주소, 데이터 등을 전송시키는 시간을 조절하여 데이터간 충돌을 회피

 

https://www.renesas.com/us/en/support/technical-resources/engineer-school/mcu-programming-peripherals-01-gpio.html

 

2. 메모리

- 기억 장치. 휘발성 비휘발성에따라 RAM과 ROM으로 구분

- 휘발성 : 전원이 없을때 데이터가 날아감 -> RAM

- 비휘발성 : 전원이 없을때 데이터 보존 -> ROM

 

2.1 ROM Read Only Memory의 종류

 - PROM Programmable ROM - 프로그래밍 가능한 메모리. 한번만 쓰기가능

 - EPROM Erasable Programmable ROM - 자외선으로 쓰고 지우는게 가능한 PROM

 - EEPROM Electric EPROM : 전기적 충격으로 쓰기 읽기가 가능한 ROM

        => 대표적인 EEPROM으로 Flash Memory가 존재

 

2.2 RAM Random Access Memory

 - SRAM, DRAM, SDRAM이 존재

 - SRAM Static Random Access Moery

      -> 트랜지스터만으로 만든 메모리, 고속, 고가 소형화 힘듬 

 - DRAM Dynamic RAM

      -> 캐퍼스터와 트랜지스터로 구성된 메모리                        

      ->  캐퍼시터를 사용한 만큼 데이터 손실을 막기위해 충전하는 Refresh Time 필요. 저가

 - SDRAM Synchronous DRAM

    -> 동기식 메모리. 외부에서 공급해주는 클럭에 따라 동기화

    -> 클럭 신호선이 존재하여 데이터 처리 시 지연시간 latency 필요

 - 아래의 그림은 SRAM의 소자

https://ko.wikipedia.org/wiki/%EC%A0%95%EC%A0%81_%EB%9E%A8

 

 

 

3. 메모리맵

- 대부분의 MCU의 데이터 시트에서 제공하는 정보로 할당된 각 메모리의 주소와 용량을 알 수 있음.

- 아래은 하드웨어 구성을 위한 메모리맵으로 SRAM 영역이 0x2000 0000 ~ 0x3FFF FFFF임을 알 수 있음

 

https://todayis.tistory.com/tag/%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A7%B5

 

- 아래의 그림은 소프트웨어적으로 분리된 메모리 맵

 스택 영역 stack : 지역변수, 함수 포인터

 힙 영역 heap : 동적 할당된 메모리 공간

 코드 영역 code : 명령어 등이 저장됨

 데이터 영역 data : 전역 변수들이 저장

https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5

 

 

4. 레지스터 register

- MCU 내부에 존재하는 가장 빠른 메모리. 비싸 페리페럴이나 CPU 내부에 작은 공간을 가짐

- 프로그램 카운터 PC Program Counter, 스택 포인터 SP Stack Pointer, 명령 레지스터 IR Instruction Register, 데이터 레지스터 DR Data Register, AR Address Register, 범용 레지스터 General Register 등 존재

 

4.1 레지스터 종류

- 프로그램 카운터 : 다음에 실행할 명령어의 주소를 저장하는 레지스터

 * 아래의 그림은 프로그램의 실행과정으로 여기서 프로그램 카운터가 다음에 실행할 명령어 주소를 가지고 있음

   => 프로그램 카운터의 값이 실행할 명령어 위치가 되어 찾아감

      다음 프로그램 카운터값은 명령어 크기만큼 +됨.

      32비트 컴퓨터 즉, 4바이트 크기라면 0x0000 -> 0x0004 -> 0x0008

https://kasckasc.tistory.com/entry/2-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EC%8B%A4%ED%96%89-%EA%B3%BC%EC%A0%95-%EB%B0%8F-CPU-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%9B%90%EB%A6%AC

- 스택 포인터

   -> 함수 호출과 관련된 정보들을 스택 자료구조로 저장하는 공간.

   -> 함수가 호출되고 종료후 돌아갈 지점과 데이터들을 관리

 

 

http://www.tcpschool.com/c/c_memory_stackframe

 

- 명령어 레지스터 : 명령어들을 담는 레지스터

- 데이터 레지스터 : 데이터들을 담는 레지스터

- 범용 레지스터 : 프로그램 카운터, 스택 포인터, 명령/데이터 레지스터 제외한 범용 목적의 레지스터

 

 

 

5. 메모리 관리 유닛 MMU Memory Management Unit

MMU

- 메모리 공간에 프로그램을 로드하여 사용중에 충돌이나 문제를 막기위한 HW.

  * 동일한 문제를 막기위한 SW로 OS가 있음.

 

MMU 기능과 구성 요소

- 기능 : 가상 메모리 Virtual Memory와 실제 Physical memory 사이 변환 및 메모리 보호

- 가상 메모리 : 가상의 메모리로 물리적인 메모리보다 큼

- 물리 메모리 : 실제 존재 존재하는 메모리

 

가상 메모리, MMU를 사용하는 이유

- 소프트웨어는 자신이 사용할 공간을 자기가 고르지 못하고 메모리 관리를 위해 운영체제가 배정해줌

- 프로그램들은 가상 메모리의 0x0000 0000에서 시작하지만 실제로 MMU가 물리 메모리의 주소로 변환해줌

- 여러 프로그램들이 초기 지점인 0x0000 0000에서 시작하고, 물리 메모리 상에서 겹쳐지지 않게 하기 위함

 

https://awesomebit.tistory.com/22

 

 

6. 캐시 메모리

캐시 메모리

- CPU는 매우 빠르게 동작하지만, 메모리는 CPU에 비해서 상대적으로 느림

- 중간에 데이터를 미리 모아놓기 위한 공간으로 캐시메모리 사용.

- 캐시메모리는 레지스터보다 크나 메모리에 보다 매우 작음

- 아래의 그림은 CPU와 캐시 메모리, 메모리 사이의 구조를 보여줌

https://m.blog.naver.com/PostView.nhn?blogId=remocon33&logNo=220129153263&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

 

 

7. 페리페럴 Peripheral

페리페럴

- MCU 내부에 존재하는 주변장치들, 주변장치들을 사용하기 위한 단자

- 대표적으로 통신 페리페럴로 UART, SPI, I2C 등이 존재

- 아래의 그림은 페리페럴들의 예시

https://www.renesas.com/us/en/support/technical-resources/engineer-school/mcu-programming-peripherals-01-gpio.html

 

UART Universal Asychronous Receive Transmiter

- 범용 비동기 수신 발신기로 송신용 Tx와 수신용 Rx 신호선 2개로 구성됨

- 비동기 인 만큼 클럭에 상관없이 통신은 가능

- 아래의 그림은 UART 통신 시 연결

https://www.weekitech.com/2019/05/13/introduction-to-uart/

- 아래의 그림은 UART 통신시 데이터 프레임(형태)

https://m.blog.naver.com/PostView.nhn?blogId=1992cjm&logNo=220438189832&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

RS-232

- 비동기 통신 중 길이와 속도를 맞추기 위해 RS-232라는 표준이 제정됨

 => RS-232로 특정 규칙에 따라 UART 통신이 안정적으로 수행됨

- 아래의 그림은 RS-232 핀아웃 별 의미

http://raspberrypi.tomasgreno.cz/uart-to-rs-232.html

 

- 아래의 그림은 RS-232 통신 시 데이터 프레임

https://qastack.kr/electronics/110478/difference-between-uart-and-rs-232

 

 

 

 

명령어 실행과정

- 명령어 실행 사이클이라도 함

- 메모리에서 명령어를 가져오고 fetch, 명령어를 해독 후 decode, 실행 excution하는 과정

https://kasckasc.tistory.com/entry/2-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EC%8B%A4%ED%96%89-%EA%B3%BC%EC%A0%95-%EB%B0%8F-CPU-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%9B%90%EB%A6%AC

 

 

 

 

파이프라인

파이프라인 구조

- 명령어 실행 과정으로,  패치 -> 해석 -> 실행 -> 저장 으로 정리할 수 있음

- 이를 고속으로 하기 위한 구조를 파이프라인. 

 

파이프라인과 싱글라인의 차이

- 기존의 싱글 라인 구조는 하나의 명령어가 종료될때까지 다음 명령어가 대기

- 파이프라인 구조에서는 첫 명령어가 다음 단계로 넘어가면 새로운 명령어가 들어와 여러 명령어가 동시 수행

- 아래의 그림은 파이프라인 구조 예시

https://doitnow-man.tistory.com/72

 

 

 

인터럽트

인터럽트란

- 프로그램 수행시 중간에 처리해야하는 상황과 동작 -> 예외처리/인터럽트라 부름

- 인터럽트 발생시 인터럽트 종류에 따라(인터럽트 벡터 테이블을 참고하여) 정해진 명령으로 PC의 값이 변경됨

- 아래의 그림은 인터럽트 벡터 테이블로 인터럽트 종류에 따라 수행해야할 동작들의 주소를 알려줌

 

https://blog.naver.com/seim_ryu/110020336124

 

인터럽트 관련 용어

- 인터럽트 벡터 :인터럽트를 처리하기위한 PC값으로 벡터 테이블에서 프로그램 카운터 값을 가져옴

- 인터럽트 핸들러 ISR Interrupt Service Routine : 인터럽트 발생시 처리해야할 콜백 함수

- 아래의 그림은 인터럽트 처리 과정

을 보여줌

https://m.blog.naver.com/PostView.nhn?blogId=scw0531&logNo=220650635893&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

 

 

 

 

300x250

+ Recent posts