전체 글
-
AI Linear regression 파이썬 구현인공지능 2020. 5. 24. 16:51
지금까지 y = Wx + b 라고 표현했지만 행렬 dot product를 통해 계산을 해내려면 y = xW + b 라고 생각하는게 좋습니다. 그렇게 되면 입력 값(x)의 집합 X 와 X * W + b 로 나온 결과의 집합(Y) 를 구할 수 있고, 실제 정답의 집합 T와의 오차가 최소인 W, b 를 구하는것이 목표입니다. Training data 준비 # 입력 데이터와 출력 데이터 셋을 (5 * 1) 행렬로 변환(reshape) x_data = np.array([1, 2, 3, 4, 5]).reshape(5, 1) y_data = np.array([2, 3, 4, 5, 6]).reshape(5, 1) 임의의 W, b 준비 # 최초로 등록될 임의의 W, b 설정 # 0 ~ 1사이의 값으로 (1 * 1)짜리 ..
-
C/C++ vfork(2)C,C++ & Linux 2020. 5. 24. 02:21
함수 기능 자식 프로세스를 생성하되 자식 프로세스가 먼저 실행됨을 보장하는 함수입니다. vfork() 함수는 자식 프로세스가 exec() 계열의 함수를 호출하는것을 전제로 하고 사용하는 함수입니다. vfork() 함수 호출 시 자식 프로세스가 먼저 실행됨을 보장할 뿐만 아니라 _exit() 되거나 exec() 될 때까지 부모 프로세스는 대기합니다. fork() 함수와는 달리 메모리를 복사하지 않기 때문에 약간의 성능적 이득이 있습니다. 다만 exit() 함수를 자식 프로세스에서 호출하게 되면 메모리를 복사하지 않기 때문에 부모 프로세스의 기본 입출력 파일까지 모두 닫아버려서 부모 프로세스는 표준 입출력 파일을 사용할 수 없는 문제가 생기므로 vfork() 로 생성된 자식 프로세스는 _exit() 함수로 ..
-
C/C++ fork(2)C,C++ & Linux 2020. 5. 24. 01:53
함수 기능 자식 프로세스를 생성해주는 함수입니다. 자식 프로세스는 부모 프로세스의 복사본입니다. 따라서 fork() 이후의 동작은 같은 코드에 의해 동작합니다. 자식 프로세스는 Stack 영역, Data 영역, Heap 영역에 대해 복사본을 갖기에 둘이 같은 공간을 참조하지는 않지만 Text(Code)영역은 부모 프로세스의 영역을 공유합니다. 다만 자식 프로세스가 생성될 때부터 Stack, Data, Heap 영역에 대한 복사본을 갖게 되는 것은 아닙니다. fork() 함수 이후에는 exec 계열의 함수를 호출하는 경우가 많기 때문에 미리 복사해두지 않고 부모 프로세스나 자식 프로세스가 Stack, Data, Heap 중 어느 한 곳이라도 수정하게 되는 순간 복사하는 COW(Copy On Write) 정..
-
AI Gradient descent 알고리즘인공지능 2020. 5. 24. 01:04
손실함수(Loss function)가 최소값을 갖는 W, b 를 찾기 위한 알고리즘입니다. 손실함수 E(W, b) = ( 실제 정답 - 모델의 계산값 ) ^ 2 으로 2차함수 형태를 가집니다. 따라서 아래 그림과 같이 포물선 형태의 그래프를 가집니다. 학습률로 표현된 알파값은 경험적으로 선택하는것입니다. 알파 값을 너무 작게 잡으면 학습 속도가 느려지게 되고, 너무 크게 잡으면 아래 그림과 같이 특정 구간을 반복하는 문제가 생길 수 있습니다. 참고로 W 라는 것은 가중치를 의미하며 다변수 함수일 경우에는 W1, W2, b 와 같이 여러 개의 W에 대해 최적의 Loss 를 찾아야 할 수 있습니다. 이는 여러 개의 변수 중에서 어떤 요인을 가장 중요하게 생각할 것인지, 혹은 가장 덜 중요하게 생각할 것인지에..
-
AI Linear Regression인공지능 2020. 5. 24. 00:10
Regression Training Data를 이용하여 데이터의 특성과 상관관계를 파악하고, 그 결과를 바탕으로 미지의 데이터에 대해 그 결과를 연속적인 숫자값으로 예측하는 것 학습(Learn) 이란? 학습이란 Training data의 분포를 잘 표현하는 방정식 y = Wx + b 를 찾는 것입니다. 즉 최적의 W와 b를 찾는 것이 학습의 목적입니다. 오차(Error)란? t가 정답 데이터라고 할 때 오차 = t - y = t - (Wx + b) 손실함수(Loss function) Training data의 정답 t 와 입력 x에 대한 계산 값 y 의 차를 모두 더해 수식으로 표현하는 함수 단, 아래 그림과 같이 error 가 음수일 수도 있기 때문에 그냥 더해주는 것으로는 오차끼리 상쇄되는 문제가 생..
-
C/C++ getpid(2) getppid(2) getuid(2) geteuid(2) getgid(2) getegid(2)C,C++ & Linux 2020. 5. 23. 13:51
함수 기능 프로세스 아이디 관련한 함수들입니다. getpid() : 호출한 프로세스의 프로세스 아이디를 알려줍니다. getppid() : 호출한 프로세스의 부모 프로세스 아이디를 알려줍니다. getuid() : 호출한 프로세스의 사용자 아이디를 알려줍니다. geteuid() : 호출한 프로세스의 유효사용자 아이디를 알려줍니다. getgid() : 호출한 프로세스의 그룹 아이디를 알려줍니다. getegid() : 호출한 프로세스의 유효 그룹 아이디를 알려줍니다. 함수 원형 #include #include pid_t getpid(); pid_t getppid(); uid_t getuid(); uid_t geteuid(); gid_t getgid(); gid_t getegid(); 반환값 각 함수에 맞는 아이..
-
AI 수치미분 Python 구현인공지능 2020. 5. 23. 05:28
수치미분 구현 순서 구현 소스 // f 는 함수 // x 미분을 알고자 하는 입력 값 def numerical_derivative(f, x): // 반올림 오차발생을 막기 위해 너무 작게는 하지말고 10의 -4승 정도가 적당함 delta_x = 1e-4 return (f(x + delta_x) - f(x - delta_x)) / (2 * delta_x) def fun(x): return x ** 2 result = numerical_derivative(fun, 3) print("result == ", result) 결과 다변수 함수에 대한 수치미분 즉 x, y 에 대해 각각 수치미분하여야 합니다. x에 대한 미분은 y를 2로 고정시키고 x값 1에서 x를 아주 미세하게 변화시켰을 때 f(x, y) 가 8만..
-
AI 미분과 편미분 & 연쇄법칙(Chain Rule)인공지능 2020. 5. 23. 04:44
미분의 정의 미분은 다음과 같이 x의 증가량이 한 없이 작아질 때 y의 증가량을 의미합니다. 중요한 점은 미분이 의미하는 점인데요 미분은 함수의 순간변화량을 의미하고, 이는 x에 대해 아주 미세하게 변화를 주었을 때 함수가 얼마나 민감하게 반응하는가? 에 대한 수치이기도 합니다. f'(3) = 6 이라는 것은 입력 x = 3에서 미세하게 변화시킬 때 함수는 현재 입력값의 2배인 6배 변화를 일으킨다는 것을 의미합니다. 자주 사용되는 미분 공식 편미분 입력 변수가 하나 이상인 다변수 함수에서 미분하고자 하는 변수 하나를 제외한 나머지 변수들을 상수 취급하고 해당 변수를 미분하는 것 편미분 활용 체중(야식, 운동) 이라는 2변수 함수가 있고, 이를 편미분한다는 것은 다음과 같은 의미를 지닙니다. 야식에 대해..