위 자료는 SungKim 교수의 PyTorch Zero To All 강의의 내용입니다.

 

이전까지는 1개의 hidden layer를 가진, 모델들을 보았으나, 위 모델은 mulit-layer입니다.

from torch import nn, optim, from_numpy
import numpy as np

xy = np.loadtxt('./data/diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = from_numpy(xy[:, 0:-1])
y_data = from_numpy(xy[:, [-1]])
print(f'X\'s shape: {x_data.shape} | Y\'s shape: {y_data.shape}')

먼저 주어진 데이터를 numpy로 불러오고, tensor로 변환해줍니다. 

데이터는 input 성분이 8개, output이 1개이며, 전체 데이터수는 759개입니다.

input-> 8행, output -> 1행 

output은 0과 1 즉, 당뇨로 진단 혹은 아님 두 가지의 logistic입니다.

class Model(nn.Module):
    def __init__(self):
        """
        In the constructor we instantiate two nn.Linear module
        """
        super(Model, self).__init__()
        self.l1 = nn.Linear(8, 6)
        self.l2 = nn.Linear(6, 4)
        self.l3 = nn.Linear(4, 1)

        self.sigmoid = nn.Sigmoid()
        self.relu = nn.ReLU()
    def forward(self, x):
        """
        In the forward function we accept a Variable of input data and we must return
        a Variable of output data. We can use Modules defined in the constructor as
        well as arbitrary operators on Variables.
        """
        #out1 = self.sigmoid(self.l1(x))
        #out2 = self.sigmoid(self.l2(out1))
        out1 = self.relu(self.l1(x)) 
        out2 = self.relu(self.l2(out1))
        y_pred = self.sigmoid(self.l3(out2))
        return y_pred

모델은 다음과 같이 되었있습니다. 

원본 코드에는 첫 번째, 두 번째 레이어의 Activaition function이 Sigmoid였으나, 정확도가 ReLU에 비해서 너무 낮아서 ReLU라고 바꿔보았습니다.

model = Model()
criterion = nn.BCELoss(reduction='mean')
optimizer = optim.SGD(model.parameters(), lr=0.1)

# Training loop
iter_num = 100
for epoch in range(iter_num):
    # Forward pass: Compute predicted y by passing x to the model
    y_pred = model(x_data)

    # Compute and print loss
    loss = criterion(y_pred, y_data)
    print(f'Epoch: {epoch + 1}/{iter_num} | Loss: {loss.item():.4f}')

    # Zero gradients, perform a backward pass, and update the weights.
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

다음과 같이 학습하였습니다. 

 

BCEloss의 경우, 마지막 레이어의 값이 0~1로 조정해주어야 하기 때문에 sigmoid를 적용하였습니다.

 

[고민해볼 점]

왜 Sigmoid 보다 ReLU가 효과가 좋았을까?

sigmoid 함수의 경우 치역의 범위가 0<n<1 이기 때문에

chain rule로 계속 이어 나간다면 결과가 0으로 수렴할 수 밖에 없다. 그렇기 때문에 1보다 작아지지 않게 하기 위해서 ReLU를 적용하게 하면 높은 정확도를 얻을 수 있다고 한다. 아직은 단순히 직관적인 이야기로만 받아들여진다. 추후에 더 공부해보자

 

다양한 Activation Function들

 

'머신 러닝 및 파이썬 > 딥러닝 기초 , 파이토치' 카테고리의 다른 글

parameter 확인하는 법  (0) 2021.01.03
Tensor Manipulation  (0) 2021.01.03
Linear Regression  (0) 2020.12.29
Supervised Learning  (0) 2020.02.18

TensorFlow를 적당히 듣다가, 이제와서 Pytorch로 다시 듣기 시작했다. 참으로 게으른 사람일 수가 없지만

어쩌겠나, 지금부터라도 열심히 해야지

 

여러가지를 배우면서 Linear Regression model을 class 형태로 작성해보았다. 

Linear Regression은 y = x * w + b 의 선형 함수를 찾아가는 과정이라고 볼 수 있다.

import torch
from torch import nn
import matplotlib.pyplot as plt
import numpy as np

# y = 0.5x + 1 를 얻기위함
x_np = np.arange(0, 10, 1)
y_np = []
for x_val in x_np:
    noise = np.random.normal(0.5, 0.5)
    new_x = x_val + noise
    y_np = np.append(y_np, 0.5*new_x + 1)

먼저 라이브러리들을 부르고, numpy를 사용해서 noise가 포함된 10개의 데이터를 생성했다. y = 0.5x + 1의 그래프를 만들기 위함이다. 

x = torch.from_numpy(x_np).float()
y = torch.from_numpy(y_np).float()
x = x.unsqueeze(1)
y = y.unsqueeze(1)

데이터는 1차원 배열로 되어있는데, [[1. ],[2. ],[3. ],[4. ]...]의 2차원 형태로 바꾸어주어야 한다. 정확히는 1차원 텐서를 늘어뜨린 모양으로 바꿔주어야 하기 때문에 unsqueeze를 사용한다.

plt.xlim(0, 11); plt.ylim(0, 8)
plt.title('Linear Regression Model')
plt.scatter(x,y)

다음과 같은 데이터가 만들어졌다. 노이즈를 평균 0.5, 표준편차 0.5인 normal distribution으로 설정하였기에, 아무래도 노이즈가 커보인다.

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear = torch.nn.Linear(1,1, bias=True)
        self.weight = self.linear.weight
        self.bias = self.linear.bias
        
    def forward(self, x):
        return self.linear(x)

실제로 이제 모델을 만들었다. weight와 bias를 사용하기 위해서 따로 저장했으며, forward는 원래는 x*w + b의 꼴일 것이다. 이를 PyTorch에 있는 Linear를 사용하였다. (아직 정확한 의미 파악 못했음)

model = Model()
criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

for epoch in range(500):
    y_pred = model(x)
    loss = criterion(y_pred, y)
    if epoch % 10 == 0:
        print(f'Epoch: {epoch} | Loss: {loss.item()}')
        
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

loss function을 설정하고, optimizer로 adam을 사용했다. SGD를 사용하는 경우 loss가 INF가 되는데, 수렴되지 못하고 진동이 커져서 그런가 싶다. (2변수 이상일 때는 SGD가 효과적이지 않을까)

 

  • optimizer.zero_grad(): PyTorch는 parameter의 gradient 계신 시 grad를 계속 누적해서 더한다. 그렇기 때문에 매 계산에서 초기화 해주어야한다.
  • loss.backward(): gradient 계산을 back propagation한다. 
  • optimizer.step(): 계산한 gradient로 param을 업데이트 한다. ( w <- w + αΔw, b <- b +  αΔb)
print(4, model(torch.tensor([[4.0]])).data[0][0].item())

 

x가 4일 때 값을 확인해보면 3.14 정도 나오게 된다. (실제 값은 3.39)

def display_results(model, x, y):
    prediction = model(x)
    loss = criterion(input=prediction, target=y)
    
    plt.clf()
    plt.xlim(0, 11); plt.ylim(0, 8)
    plt.scatter(x.data.numpy(), y.data.numpy())
    plt.plot(x.data.numpy(), prediction.data.numpy(), 'b--')
    plt.title('loss={:.4}, w={:.4}, b={:.4}'.format(loss.data.item(), model.weight.data.item(), model.bias.data.item()))
    plt.show()
    
display_results(model, x, y)

최종적으로 결과를 출력해보면 다음과 같다.

'머신 러닝 및 파이썬 > 딥러닝 기초 , 파이토치' 카테고리의 다른 글

parameter 확인하는 법  (0) 2021.01.03
Tensor Manipulation  (0) 2021.01.03
Multi-layer 예시 [Diabetes Logistics]  (0) 2020.12.29
Supervised Learning  (0) 2020.02.18

- Sung kim 교수의 Pytorch Zero to All 5강 수강

 

- 간단한 Linear Regression pytorch 모델 생성

 

여전히 많이 게으르다. 열심히 해보자

'TIL' 카테고리의 다른 글

1월 4일  (0) 2021.01.04
1월 3일  (0) 2021.01.04
12월 31일, 1월 1일, 2일  (0) 2021.01.03
12월 30일  (0) 2020.12.30
12월 29일  (0) 2020.12.29

Introduction to Algorithm에도 나와있는 예제입니다. 위 문제는 한 가지 규칙을 정해서 Greedy하게 풀 수 있습니다. 

 

다음과 같은 예시에서 직관적으로, 일찍 끝나는 회의를 결정하면 최대한 많은 회의를 할 수 있음을 알 수 있습니다.

 

노란색 막대 4개를 선택할 수도 있으며, 초록색을 대신해서 선택할 수도 있습니다. 결과는 동일합니다.

 

즉 이 문제는 Greedy하게, 회의가 끝나는 시간이 이른 순으로 선택하면 답을 얻을 수 있습니다.

 

전체 코드는 다음과 같습니다.

 

#include <iostream>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#pragma warning(disable:4996)

bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
	if (a.second == b.second)
		return a.first < b.first;
	return a.second < b.second;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	int N, n1, n2;
	cin >> N;

	vector<pair<int, int>> v;
	for (int i = 0; i < N; i++) {
		cin >> n1 >> n2;
		v.push_back(make_pair(n1, n2));
	}

	sort(v.begin(), v.end(), cmp);

	int cnt = 1;
	int min = v[0].second;

	for (int i = 1; i < N; i++) {
		if (v[i].first >= min) {
			min = v[i].second; // 미리 정렬 해놓아서 사용할 수 있음
			cnt++;
		}
	}
	
	cout << cnt << '\n';

	return 0;
}

'알고리즘 > BOJ' 카테고리의 다른 글

[백준 2261] 가까운 두 점 찾기 - Sweep line Algorithm  (0) 2020.09.08

참고: www.acmicpc.net/blog/view/25

 

가장 가까운 두 점 찾기

가장 가까운 두 점 찾기 문제는 2차원 평면 위에 점 N개가 있을 때, 거리가 가장 가까운 두 점을 찾는 문제입니다. (2261번 문제: 가장 가까운 두 점) N이 작은 경우에는 모든 경우를 다해보는 방식��

www.acmicpc.net

 

 

너무나도 까다로운 문제였습니다. 분할정복으로도 풀 수 있으나, 백준님의 해설을 따라서 Sweep-line algorithm으로 해결해 보았습니다.

 

먼저 이 문제는 1초의 시간제한을 가지고 있기 때문에 모든 점을 서로 비교하는 방법의 O(n^2)의 시간으로 풀 수 없습니다.

그렇기에 O(nlog n)의 Sweep-line algorithm을 사용하였습니다.

 

코드의 실행 순서는 다음과 같습니다.

1. Point를 x 크기 순으로 정렬합니다.

2. dist(a[0], a[1])을 최소값으로 먼저 설정하고, pivot이라고 할 수 있는 a[2] 와 비교합니다. 

3. a[0] 와 a[2]의 x 거리를 비교한 dx가 ans (정답 길이)보다 길다면 후보군에서 뺍니다. 

4. 이 과정을 반복해 x의 정답 길이 안 쪽에 있는 후보군을 추출합니다. 

다음과 같이 x 길이로 후보군을 추출했으니 이제 y 값으로 최소 길이를 찾을 차례입니다.

5. upper bound, lower bound로 y값의 차이가 d 이하인 후보군들의 길이를 서로 비교합니다. 

6. 이 과정이 끝나면, pivot을 후보군에 넣고, pivot을 전진시킵니다.

7. 위 과정을 반복합니다. 

 

이 논리대로 문제를 풀이하는 경우 O(2NlogN)의 시간복잡도를 가지게 되어 시간 초과가 나게 됩니다. 

이를 해결하는 방법으로 2가지가 있습니다.

 

1. set 자료구조를 이용해서, 입력 단계에서 y값의 순서를 지켜주어, y값의 정렬을 하지 않습니다.

또한 set은 삽입, 삭제, 탐색이 모두 O(lgN)이 걸리기 때문에, O(NlgN)이라는 시간으로 가장 가까운 두 점을 구할 수 있습니다.

 

2. while(start - i)

for (auto it = candidate.begin(); it!=candidate.end(); ) {
            auto p = *it;
            int x = now.x - p.x;
            if (x*x > ans) {
                it = candidate.erase(it);
            } else {
                it++;
            }

 만약 다음과 같이 코드를 작성했다고 한다면 굉장한 시간 낭비입니다. set은 x가 아닌 y순으로 정렬되어있기 때문에 필요없는 순회를 많이 해야합니다.

while (start < i) {
            auto p = a[start];
            int x = now.x - p.x;
            if (x*x > ans) {
                candidate.erase(p);
                start += 1;
            } else {
                break;
            }
        }

하지만 다음과 같이 수정해준다면 (a는 vector<Point>) 반복자로 순회하며 제거하는 것이 아니라 set의 제거 즉 lgN 타임에 해결할 수 있으므로, 속도가 올라갑니다.

 

 

전체 코드는 다음과 같습니다.

#pragma warning (disable: 4996)
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

struct Point {
	int x, y;
	Point() {
	}
	Point(int x, int y) : x(x), y(y) {
	}
	// set 등 자동으로 대소비교를 해주는 STL에서 구조체/클래스 등의 타입을 넣어주었을 때 발생하는 에러
	// 내부에서 데이터를 가지고 비교해야하는데 구조체 타입이기 때문에 연산을 할 수 없다.
	// 이를 해결하기 위해서 내부 정렬을 위한 방법을 지정해주면 된다.
	// 아래에서는 y값 순서대로 비교할 수 있게 하였다.
	bool operator < (const Point &v) const {
		if (y == v.y) {
			return x < v.x;
		}
		else {
			return y < v.y;
		}
	}
};
// x 값 비교
bool cmp(const Point &u, const Point &v) {
	return u.x < v.x;
}

// 두 점 사이 거리 제곱
int getDist(Point p1, Point p2) {
	return (p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y);
}

int main() {
	int n;
	scanf("%d", &n);
	vector<Point> a(n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &a[i].x, &a[i].y);
	}
	sort(a.begin(), a.end(), cmp); // x 커지는 순으로 정렬
	set<Point> candidate = { a[0], a[1] };
	int ans = getDist(a[0], a[1]); // 처음 최소값은 0번 1번 거리로
	int start = 0;
	// candidate가 0번 1번으로 시작하니까 p는 2번부터 시작
	for (int i = 2; i < n; i++) {
		Point now = a[i];
		// 정해진 now를 기준으로 후보군과 길이 비교해서, 후보군 추리기
		while(start < i) {
			auto p = a[start];
			int dx = now.x - p.x;
			// 직선 거리가 정답보다 길다면 아예 후보군에 넣을 필요가 없음 
			if (dx*dx > ans) {
				candidate.erase(p);
				start += 1; // 시작점 앞당기기
			}
			else
				break;
		}
		int d = (int)sqrt((double)ans) + 1; // 길이 보정
		auto lower_point = Point(-100000, now.y - d); // 좌측 하단 
		auto upper_point = Point(100000, now.y + d); // 우측 상단
		// 하한값 위치, 상한값 위치
		auto lower = candidate.lower_bound(lower_point);
		auto upper = candidate.upper_bound(upper_point);

		for (auto it = lower; it != upper; it++) {
			// x값으로 추려진 candidate에서 
			int d = getDist(now, *it);
			// 지속적으로 ans를 갱신
			if (d < ans)
				ans = d;
		}
		// 사용된 now 역시 다시 후보군으로
		candidate.insert(now);
	}

	printf("%d\n", ans);

	return 0;
}

 

 

 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준 1931] 회의실 배정 - Greedy Algorithm  (0) 2020.09.13

001

 

자기 소개를 시작할 때 My name is ~ 를 사용하지 말고 그냥 I'm ~ 라고 해라

사람에 초점을 맞춰서 이야기 해라 (go to dentist... )

 

002

 

Controlled Singular 전략

 

So many = loads of = tons of = myriads of 

 

특정 가게 이름 등의 Detail이 있다면 이름을 말해주어라

 

Description 문제에서 like 와 같은 비유를 사용하면 좋다.

 

MP잡기

1. What is it?

2. How do you feel about it?

3. Why?

 

단어 & 단어로 연결을 하는 경우 ex) cozy and I feel relaxed

에서 뒷 부분을 약간 늘여서 말하는 것이 자연스럽다. 

 

So 도 좋지만, That's why를 사용해보자!

 

003

 

~made my blood boil to the max. 엄청 화나게 했다.

obnoxious = annoying

 

I couldn't believe how ~ 

 

004

 

생각하는 시간은 5초 안쪽으로

사실 상 바로 시작해야한다. 

 

When I was in high school, When I was high school days 내가 고등학생이었을 때

 

I can't say for certain. 확실하지는 않아. 

 

My friends and I 나와 다른 사람들을 이야기할 때, 남을 먼저 말을 하자.

 

I would have to say~ 

I would have to talk about 일반적인 대화에서는 natural 하지 않다.

 

It was worth it ~할 가치가 있었다.

 

Didn't even think about ~할 생각도 안했다.

 

005

 

말을 하다가 잊었을 때, the... 까먹음, a lot of them... 까먹음

이런 상태라면 뒷부분에서 다시 the, a lot of them으로 문장을 시작해야한다.

그게 아니고 완전 다른 단어로 시작한다면 filler를 넣어주자

 

006

 

비교 문제를 할 때는 확실한 main point가 필요하다

 

MP

- Pure present

- Past 

- Present 

 

Anything much / All that much ~뭔가 많이 하지 않지만 

at that time을 사용하지 말고 during those times나 back then을 사용해라!

 

I found it ~ ~임을 알았다.

 

You know what I mean 추천하는 표현!

 

007

 

~을 한 것 보다도, 어떻게 느꼈는지에 대해서 집중을 하면서 말하자

if, if only와 같은 표현을 많이 사용하자.

 

The next thing you know 그리고 다음은 (갑자기 이렇게 되었다는 뉘양스)

 

at all [부정문에서 ]조금도 (..아니다)

 

008


굉장히 빠르게 생각해야한다. filler도 빠르게 사용해야한다. 생각도 안하고 자연스럽게 나오는 것처럼.

self correction을 피하자.

 

versatile 다용도의, 다목적의

 

대답을 할 때 감정에 집중하고 있는지, 단순히 설명하려고 하고 있는지 생각해보자

 

009

 

which

because

really 

since 

짧은 문장을 길게 만들어줄 수 있는 단어들

 

I'll be talking about...  굉장히 자연스러운 표현

I would like to talk about...

 

Overall 끝을 내면서 사용하기 좋다.

 

[좋은 표현]

really that

all around the world

tiny, little (작다는 내용의 강조)

 

 

010

 

"Ava 와 대화하는 법"

   - you가 많이 들어간 말을 사용하라

 

"Developing Story"

   MP -> 이야기 전개

   Just for the record  분명히 말해서

 

[좋은 표현]

I gotta tell you.. (I have to tell you 대신)

I'm sure you've heard ~

I learned an important lesson.

way better 훨씬 낫다.

 

011

 

Role Play #11

 

Step 1 - 대충 내용 설명

Step 2 - 첫 번째 질문하기

Step 3 - 상대방 말 보여주기

Step 4 - 정말? 진짜?

Step 5 - "나"를 포함시키기

 

Step 2 - 두 번째 질문하기

Step 3 - 상대방 말 보여주기

Step 4 - 정말? 진짜?

Step 5 - "나"를 포함시키기

 

Step 2 - 세 번째 질문하기

Step 3 - 상대방 말 보여주기

Step 5 - "나"를 포함시키기

 

012

 

Role Play #12

 

기본 답변 방식:  2가지 질문 -> 문제 해결

돈 관련 : No -> Yes

돈 관련 X : 프리스타일

 

말해야하는 2~3가지 질문들은 모두 문제 해결에 집중되어있는 것이어야 한다.

What do you think와 같은 질문은 질문이 아니다!

 

문제 발생 -> 이렇게 하면 어떨까? (첫 번째 질문) -> 이건? (두 번째 질문)

 

How about 보다 What about이 더 자연스럽다.

 

I don't know about ~

It's not what I expected before ~

Seriously?

let me think...

 

 

 

'OPIc' 카테고리의 다른 글

오픽노잼 1:1 가이드 요약  (0) 2020.08.09
OPIc 문제 예시  (0) 2020.07.06
OPIc 문제유형  (0) 2020.02.17
오픽노잼 IM 시리즈 요약  (0) 2020.02.14

002

 

자기 소개 part 에서 좋아하는 것, 취미 등을 조금 말하고, 이후 질문에서 이어가면 좋다. 

주제의 connect (1~2번 정도만)

 

004

 

MP를 바로 생각해보자

detail-oriented가 아니라 feeling-oriented가 되도록 해야한다.

 

Direct Quatation

 

She was like... "현재형 표현"

I thought to myself "현재형 표현"

 

005

 

Combo Set 

 3 questions

Transition

 

Tell you more/ elaborate

Naturally express~

 

 

006

 

role play 유형

 

phone call 에서는 Hi, there 

그냥 사람을 만났다면 Hi

 

shorter and clear answer will be clearer and better

 

질문이 4개라면 3개가 끝인 것처럼 말하고 갑자기 생각난 것처럼 reaction하면 좋다.

 

Role play 에서는

1. 반응하기

2. 그리고 대답 반복하기 (실제로 답변을 해주는 것이 아니기에 무슨 말인지 알 수 없으니 반복을 통해서 느끼게하자)

3. 감정으로 마무리하기

 

007

 

Role play #2

 

Could you / Would it be possible / Would you be able to

 

Then could you just give me a refund? 에 대한 다음 말로는 Oh, you could 

could를 사용했기 때문에 똑같이 적용해준다.

 

- Explain the problem

- Ask the 1st question to resolve the problem

○ Response = No!

○ Why not?

○ Repeat the response.

○ Feeling 

- Ask the 2nd question to resolve the problem.

○ Response = Yes!

○ Repeat the response.

○ Feeling

 

008

 

날씨 Combo Set, IH와 AL 차이

 

It said we have tons of fine dust in the air. (IH)

We have a serious fine dust problem. (AL)

We are starting to have a serious fine dust issue (AL+)

 

How can I live with this much fine dust. (IH)

How am I supposed to live with this much fine dust (AL)

 

We didn't have to worry about air condition thing. (IH)

We never really had to worry about air quality. (AL)

We went outside pretty much worry-free. (AL+)

 

And we were able to do anything outside. (IM2)

And we were able to freely go outside without having to wear a mask. (AL)

 

I'm really just getting sick and tired of wearing masks all the time. 

If this keeps up, I'm gonna be forced to move out of this country. (AL)

 

009

 

날씨 Combo Set, IH와 AL 차이

 

in summer 보다 during the summer 이 훨씬 자연스럽다.

 

What am I trying to say is

What am I trying to say.. Anyway

 

010

 

IH/AL의 차이 

 

IH

MP는 30초에 대해서! 나머지는 끊임없이 감정에 대해서 이야기해라

 

No Rigid English -> moreover, furthermore, in addition

 

AL

MP는 20초, Constant speaking, 

filler가 조금 다름 => Filler Combos

Feeling-Focus!!!

 

 

좋은 표현

throwing money down the drain: 돈을 버리는거다.

 

011

 

in these days

when it comes to (~에 대해서 말하자면)

이 표현을 문장 처음이 아니고, 문장 중간에 넣자 (actually도 마찬가지)

 

self correction을 하지 마라!! 문법을 중간에 고치는 것은 불필요하다. 하고 싶다면 filler를 넣고 자연스럽게

ex) I mean~, What I'm trying to say is that ..., What am I trying to say.. anyway

와 같은 표현을 사용하고 restart 하자

 

Conclusion을 낼 때 This is why... 하는 표현이 좋다.

 

012

 

계속 IH만 받는 학생의 문제점 

-> 영어는 잘할지언정, 50% Good 50% Bad 전략이나, 한 가지에 Focus 하지 못하는 것이 문제점이다.

 

=> One Thing, 즉 Main Point를 30초하고 나머지를 거기에 대한 Detail을 설명하자.

 

013

 

IH - AL 갈 수 있는 복잡한 질문에 대한 대답방법

 

한 가지로 포커스 하는 법

 

Conclusion을 내기 위해서 

Yeah, that's pretty much all I have to say 도 괜찮다. 

 

[좋은 표현]

Grab a coffee -> 누군가와 대화를 하는 경우에 좋다. (설명 등에서가 아니라)

These days (in these days 보다는 그냥 these days가 더 좋다. 

 

014

 

돌발질문

 

1. 그냥 skip하기

2. 핑계를 좀 대면서 skip하기 

=> 보통 risky 하기 때문에 그냥 skip 하는 것이 좋을 수 있다.

 

▶ How to control a question.     본인이 준비했던 주제를 이용해서 그 쪽으로 문제를 이끌어 나가라. 

 

016

 

indirect quatation

간접화법 사용하기

 

I thought to myself that ~ 과거 시제 표현

He told me to ~

He reminded me to ~

 

Direct Quatation을 마스터하고 Indirect Quatation을 공부해보자!

 

017

 

Role play 전략: 과장법과 필러를 더 이해하기

 

과장

one of the most ~~ in the world

 

 

[좋은 표현]

effortless

with relative ease

 

018

 

MP가 약하면 IM2!

 

019

 

Habit Category 에서는 General MP를 가지고

 

MP

- What

- Feeling

- Why?

가 있는데 이 중 두 가지를 말하면 된다.

 

갑자기 말할 말이 떠오르지 않는다면

Quick Comparison을 사용할 수 있다. 

 

언제나 Why에 대한 답을 생각하도록 하자

 

[구조]

What?      나는 우리 집이 좋다.

Why?        왜냐면, 엄청 커서

So What?  친구들을 집에 데리고 오면, 공간에 대해 전혀 걱정하지 않는다.

Why?        약간 개인 카페나 바 같다. 원하는 만큼 시끄럽게 할 수도 있고 심지어 누울 수도 있다.

 

020

 

Past Experience를 연습할 때

1. 무엇에 대해 말할건지

2. 어떻게 느꼈는지

3. 왜 그렇게 느꼈는지

 

이 세 가지를 했는지 10문제 해보자

 

[좋은 표현]

All of sudden 갑자기

 

021

 

99/1 Strategy

 

99% 좋은 점을 말하면, 1%만 안좋은 점 이야기하기 

 

~~해서 좋은데, ~~한 부분은 별로다. 이것만 아니면 다 좋다. 

 

022

 

General -> Singular 로 

 

singular로 줄이기 전에, 자신이 말하고 싶은 것에 대해 전체적인 내용을 짧게 말해야 한다. 

 

질문을 컨트롤 하는 단어

- I think

- As you know => As you may already know 

- I guess

- Of course (당연하게도)

- Especially 

- just because, It's simply because

- To be honest 

- To tell you the truth

- I don't really know

- I don't know why

- anyway

 

답변을 시작할 때 문제를 컨트롤하면, 질문을 완전히 이해한 것처럼 보이게 해준다.

 

023

 

IH 학생들이 AL 못받는 이유는 같은 말을 계속 반복하기 때문이다.

 

안좋은 예시)

Starbucks coffee tastes so good.

I just love Starbucks.

Starbucks is simply the best.

=> 할 말이 없어서 계속 반복하는 것 처럼 보인다.

 

좋은 예시)

Starbucks coffee tastes so good.

But do you know what's better than Starbucks?

Free Starbucks.

 

1. Repetition 전략 - 첫번째

   a. Rhetorical Question

      - 대답을 바라고 하는 질문이 아님

      - 뭔가를 강조하기 물어보는 것.

 

   b. 같은 단어 반복해서 말하기 

 

2. Repetition 전략 - 두번째

    a. 간단한 설명

 

    b. 같은 단어 반복해서 말하기

 

024

 

There are ~ for days. ~투성이다.

 

I'm having a brain fart. 머리가 하얗게 되었다.

I'm blanking out.

I'm losing my train of thought.

 

025

 

Recycling 

 

컨트롤

People -> 나

 

We recycle quite well here.(control)

For me.. / as for me...

 

026

 

오픽 교통 관련 질문

 

I have terrible experience relate to ~

I nearly saw my life flash right before my eyes. 주마등을 보았다.

I wonder if you're ever ~

You feel me? 나 이해하지?

 

 

'OPIc' 카테고리의 다른 글

오픽노잼 AL 시리즈 요약  (0) 2020.08.13
OPIc 문제 예시  (0) 2020.07.06
OPIc 문제유형  (0) 2020.02.17
오픽노잼 IM 시리즈 요약  (0) 2020.02.14

1. I would like to know where you live

- Describe your home.

- What does it look like

- How many rooms does it have?

- Give me a description with lots of details.

 

 

2. What is your normal routine at home?

- What things do you usually do on weekdays and what kinds of things do you do on weekends?

 

 

3. Tell me about a restaurant you ate out at recently.

- What kind of restaurant was it?

- What was their menu and what did you eat?

- Who did you go with?

- Did you like how the food tasted?

 

4. Describe the home you lived in as a child.

- How was that home different from the home you live in now?

 

 

'OPIc' 카테고리의 다른 글

오픽노잼 AL 시리즈 요약  (0) 2020.08.13
오픽노잼 1:1 가이드 요약  (0) 2020.08.09
OPIc 문제유형  (0) 2020.02.17
오픽노잼 IM 시리즈 요약  (0) 2020.02.14

+ Recent posts