선형회귀

선형 회귀는 한 개 이상의 독립 변수 x와 y의 선형 관계를 모델링한다. 가중치 행렬을 W, 편향을 b, 실제값을 y라고 할 때, 선형회귀는 비용함수 MSE를 최소화하는 W와 b를 추정해 나가는 과정이다. 계산 과정 편차를 $WX_{i}+b-y_{i}$라고 할 때, 비용함수는 다음과 같다. $$cost(W,b) = \sum_{i=1}^{m} (WX_{i}+b-y_{i})^2 \cdot \cfrac{1}{m}$$ $$= \sum_{i=1}^{m}(X_{i}^2W^2+2X_{i}bW-2by_{i}-2X_{i}y_{i}W+b^2+yi^2) \cdot \cfrac{1}{m}$$ 비용함수를 W로 편미분 하면 다음과 같다. $$\partial{W} = \cfrac{\partial{cost(W,b)}} {\partial{W}} = \sum_{i=1}^{m}(2X_{i}^2W+2X_{i}b-2X_{i}y_{i})\cdot \cfrac{1}{m} $$ $$= 2X_{i}\sum_{i=1}^{m} (WX_{i}+b-y_{i})\cdot \cfrac{1}{m}$$ 비용함수를 b로 편미분 하면 다음과 같다.

OSI 7계층

OSI는 Open Systems Interconnection의 약자로 개방형 시스템 간의 상호 연결을 의미한다. 국제 표준화 기구인 ISO에서 개발한 모델로 컴퓨터 네트워크의 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 1계층 - 물리 계층(Physical Layer) 네트워크 OSI 모델에서 가장 낮은 계층으로 하드웨어 전송 기술로 구성된다. 하드웨어 장비로 케이블, 리피터, 허브가 있으며 네트워크에서 물리적으로 데이터를 전송하는 역할을 수행한다. 2계층 - 데이터 링크 계층(Data Link Layer) 물리 계층을 통해 데이터를 전송하다가 데이터가 제대로 도착하지 못하고 중도 분실되거나 데이터의 내용이 깨져서 변형이 되는 등 물리적인 오류가 발생할 수 있다.

생산자 소비자 문제와 해결

생산자 소비자 문제 고정된 크기의 버퍼(데이터를 보유하는 임시 영역)가 있을 때, 생산자는 버퍼에 데이터를 생성하는 기능을 제공하고, 소비자는 버퍼에서 데이터를 소비/제거하는 기능을 제공한다. 이 때 특정 규칙이 있다. 소비자 스레드가 데이터를 소비하는 동안 생산자 스레드는 버퍼에 데이터를 생성할 수 없다. 생산자 스레드가 데이터를 생성하는 동안 소비자 스레드는 버퍼의 데이터를 사용할 수 없다. 버퍼가 가득 차면 생산자 스레드는 더 많은 데이터를 생성할 수 없고, 버퍼가 비어 있으면 소비자 스레드는 데이터를 소비할 수 없다.

ASCII, Unicode

인코딩이란, 사용자가 입력한 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것을 말한다. 아스키코드(American Standard Code for Information Interchange) 가장 처음 만들어진 인코딩방식이다. 숫자와 문자를 매칭시키는 국제적 규칙이다. 패리티 비트를 제외하고, 128개의 문자조합을 제공하는 7비트 부호로 구성된다.(패리티 비트는 데이터의 에러를 탐지하기 위해 사용한다. 일곱자리의 이진수에서 ‘1’이 홀수개라면 끝에 1을, ‘1’이 짝수개라면 끝에 0을 덧붙인다. 아주 정밀하진 않지만 패리티 비트를 이용해 어느 정도의 에러를 탐지할 수 있다.) 아스키코드만으로는 영어만 표현 가능하며 각 나라별 언어를 표현할 수 없다는 단점이 있다.

스핀락 vs 뮤텍스 vs 세마포어 vs 모니터

동기화(Synchronization)란 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 말한다. 상호 배제(Mutual Exclusion)란 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해, 즉 동기화를 위해 사용되는 알고리즘을 말한다. 상호 배제는 락(Lock)을 사용해서 달성할 수 있다. 1 2 3 4 5 6 do { acquire lock // 여러 프로세스/스레드가 lock을 획득하기 위해 경합 [critical section] // lock을 획득한 프로세스/스레드만 임계 영역에서 실행함 release lock // 작업을 끝내고, lock을 반환함 remainder section } while(true) 스핀락(Spinlock) 1 2 3 4 5 6 7 8 9 10 11 12 13 volatile int lock = 0; // global void critical() { while(test_and_set(&lock) == 1); // lock을 획득하려는 시도를 함 [.

블로킹, 논블로킹

블로킹(Blocking), 논블로킹(Non-blocking)은 프로그램의 제어 흐름과 작업 처리 방식에 관련된 개념이다. 블로킹/논블로킹은 작업을 요청했을 때, 작업이 즉시 완료되지 않더라도 제어권을 넘겨주는지 여부로 구분한다. 블로킹(Blocking) 개념: 작업을 요청한 후, 그 작업이 완료될 때까지 제어권을 반환하지 않고 기다리는 방식. 특징 작업 스레드가 종료될 때가지 요청을 한 스레드는 차단된다. 이러한 단점을 보완하기 위해 멀티 쓰레딩 기법을 통해 추가 쓰레드를 할당할 수 있다. CPU 대비 많은 수의 쓰레드를 사용하는 것은 비효율적이다. 컨텍스트 스위칭으로 인한 쓰레드 전환 비용 발생 메모리 사용에 있어서 오버헤드 발생 쓰레드 풀에서의 응답 지연 문제 발생 예시 전통적인 파일 I/O나 네트워크 I/O 작업.